Explorar el Código

Merge branch 'master' of http://git.izouma.com/xiongzhu/raex_back into dev-meta

sunkean hace 3 años
padre
commit
1f8febb94c
Se han modificado 72 ficheros con 719 adiciones y 184 borrados
  1. 12 1
      src/main/java/com/izouma/nineth/config/CacheConfig.java
  2. 1 0
      src/main/java/com/izouma/nineth/config/Constants.java
  3. 33 0
      src/main/java/com/izouma/nineth/domain/PhotoAsset.java
  4. 2 0
      src/main/java/com/izouma/nineth/domain/Tag.java
  5. 2 1
      src/main/java/com/izouma/nineth/enums/PayMethod.java
  6. 1 0
      src/main/java/com/izouma/nineth/event/OrderNotifyEvent.java
  7. 6 0
      src/main/java/com/izouma/nineth/listener/OrderNotifyListener.java
  8. 1 1
      src/main/java/com/izouma/nineth/repo/AssetRepo.java
  9. 3 0
      src/main/java/com/izouma/nineth/repo/CollectionRepo.java
  10. 7 1
      src/main/java/com/izouma/nineth/repo/PhotoAssetRepo.java
  11. 16 16
      src/main/java/com/izouma/nineth/repo/TagRepo.java
  12. 5 3
      src/main/java/com/izouma/nineth/repo/UserAssetSummaryRepo.java
  13. 1 1
      src/main/java/com/izouma/nineth/service/AirDropService.java
  14. 11 6
      src/main/java/com/izouma/nineth/service/AssetService.java
  15. 3 1
      src/main/java/com/izouma/nineth/service/AuctionActivityService.java
  16. 2 2
      src/main/java/com/izouma/nineth/service/ContentAuditService.java
  17. 2 2
      src/main/java/com/izouma/nineth/service/MintOrderService.java
  18. 18 0
      src/main/java/com/izouma/nineth/service/OrderCancelService.java
  19. 153 27
      src/main/java/com/izouma/nineth/service/OrderPayService.java
  20. 72 19
      src/main/java/com/izouma/nineth/service/PhotoAssetService.java
  21. 14 10
      src/main/java/com/izouma/nineth/service/TagService.java
  22. 5 0
      src/main/java/com/izouma/nineth/web/AlipayNotifyController.java
  23. 3 3
      src/main/java/com/izouma/nineth/web/AssetController.java
  24. 4 0
      src/main/java/com/izouma/nineth/web/HmPayController.java
  25. 4 3
      src/main/java/com/izouma/nineth/web/MetaDestroyActivityController.java
  26. 2 2
      src/main/java/com/izouma/nineth/web/MintActivityController.java
  27. 6 6
      src/main/java/com/izouma/nineth/web/MintOrderController.java
  28. 38 0
      src/main/java/com/izouma/nineth/web/OrderPayControllerV2.java
  29. 4 0
      src/main/java/com/izouma/nineth/web/PayEaseController.java
  30. 4 0
      src/main/java/com/izouma/nineth/web/SandPayController.java
  31. 8 8
      src/main/java/com/izouma/nineth/web/TagController.java
  32. 1 0
      src/main/resources/application.yaml
  33. 75 0
      src/main/vue/src/views/Admin.vue
  34. 2 2
      src/main/vue/src/views/CollectionEdit.vue
  35. 1 1
      src/main/vue/src/views/PhotoAssetList.vue
  36. 7 2
      src/test/java/com/izouma/nineth/AES.java
  37. 7 2
      src/test/java/com/izouma/nineth/AntChainTest.java
  38. 1 1
      src/test/java/com/izouma/nineth/ApplicationTests.java
  39. 6 2
      src/test/java/com/izouma/nineth/Bucket4jTest.java
  40. 7 2
      src/test/java/com/izouma/nineth/CDNTest.java
  41. 0 5
      src/test/java/com/izouma/nineth/CommonTest.java
  42. 1 1
      src/test/java/com/izouma/nineth/ContentAuditTest.java
  43. 6 2
      src/test/java/com/izouma/nineth/DebounceTest.java
  44. 1 1
      src/test/java/com/izouma/nineth/GenCodeTest.java
  45. 1 1
      src/test/java/com/izouma/nineth/PayEaseTest.java
  46. 6 2
      src/test/java/com/izouma/nineth/PayOrderTest.java
  47. 6 2
      src/test/java/com/izouma/nineth/RedisTest.java
  48. 6 2
      src/test/java/com/izouma/nineth/TestClassTest.java
  49. 6 2
      src/test/java/com/izouma/nineth/TestRedissonLock.java
  50. 6 2
      src/test/java/com/izouma/nineth/WxTest.java
  51. 6 2
      src/test/java/com/izouma/nineth/repo/AuctionRecordRepoTest.java
  52. 18 2
      src/test/java/com/izouma/nineth/repo/CollectionRepoTest.java
  53. 6 2
      src/test/java/com/izouma/nineth/repo/OrderRepoTest.java
  54. 1 1
      src/test/java/com/izouma/nineth/repo/SmsRecordRepoTest.java
  55. 6 2
      src/test/java/com/izouma/nineth/repo/UserPropertyRepoTest.java
  56. 1 1
      src/test/java/com/izouma/nineth/repo/UserRepoTest.java
  57. 6 2
      src/test/java/com/izouma/nineth/service/AdapayMerchantServiceTest.java
  58. 6 2
      src/test/java/com/izouma/nineth/service/AdapayServiceTest.java
  59. 1 1
      src/test/java/com/izouma/nineth/service/AdapayTest.java
  60. 6 2
      src/test/java/com/izouma/nineth/service/AirDropServiceTest.java
  61. 6 2
      src/test/java/com/izouma/nineth/service/AssetMintServiceTest.java
  62. 6 2
      src/test/java/com/izouma/nineth/service/AuctionActivityServiceTest.java
  63. 6 2
      src/test/java/com/izouma/nineth/service/AuctionOrderServiceTest.java
  64. 6 2
      src/test/java/com/izouma/nineth/service/AuctionRecordServiceTest.java
  65. 6 2
      src/test/java/com/izouma/nineth/service/IdentityAuthServiceTest.java
  66. 8 2
      src/test/java/com/izouma/nineth/service/NFTServiceTest.java
  67. 9 2
      src/test/java/com/izouma/nineth/service/OrderServiceTest.java
  68. 6 2
      src/test/java/com/izouma/nineth/service/ShowroomServiceTest.java
  69. 1 1
      src/test/java/com/izouma/nineth/service/StatisticServiceTest.java
  70. 7 1
      src/test/java/com/izouma/nineth/service/UserServiceTest.java
  71. 6 2
      src/test/java/com/izouma/nineth/service/WithdrawApplyServiceTest.java
  72. 6 2
      src/test/java/com/izouma/nineth/service/sms/SmsServiceTest.java

+ 12 - 1
src/main/java/com/izouma/nineth/config/CacheConfig.java

@@ -10,6 +10,7 @@ import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.domain.User;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
 import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration;
@@ -94,7 +95,9 @@ public class CacheConfig {
                 .enable(Hibernate5Module.Feature.FORCE_LAZY_LOADING));
         mapper.registerModule(new JavaTimeModule());
         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
-        mapper.setConfig(mapper.getSerializationConfig().withView(User.View.Detail.class));
+        mapper.setConfig(mapper.getSerializationConfig()
+                .withView(User.View.Detail.class)
+                .withView(Collection.View.Detail.class));
         SimpleModule simpleModule = new SimpleModule();
         simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
         simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
@@ -107,6 +110,14 @@ public class CacheConfig {
                 .entryTtl(Duration.ofSeconds(10))
                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
 
+        cacheNamesConfigurationMap.put("collection", RedisCacheConfiguration.defaultCacheConfig()
+                .entryTtl(Duration.ofDays(1))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer)));
+
+        cacheNamesConfigurationMap.put("collectionInfo", RedisCacheConfiguration.defaultCacheConfig()
+                .entryTtl(Duration.ofDays(1))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer)));
+
         cacheNamesConfigurationMap.put("myUserInfo", RedisCacheConfiguration.defaultCacheConfig()
                 .entryTtl(Duration.ofHours(1))
                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));

+ 1 - 0
src/main/java/com/izouma/nineth/config/Constants.java

@@ -54,6 +54,7 @@ public interface Constants {
         String MINT     = "mintOrder";
         String RECHARGE = "recharge";
         String AUCTION  = "auctionOrder";
+        String PIC  = "picOrder";
     }
 
     interface Rarity {

+ 33 - 0
src/main/java/com/izouma/nineth/domain/PhotoAsset.java

@@ -1,38 +1,52 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.converter.FileObjectConverter;
 import com.izouma.nineth.enums.CollectionStatus;
+import com.izouma.nineth.enums.OrderStatus;
+import com.izouma.nineth.enums.PayMethod;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.*;
+import java.math.BigDecimal;
 
 @Data
 @Entity
 @AllArgsConstructor
 @NoArgsConstructor
+@ExcelIgnoreUnannotated
 public class PhotoAsset extends BaseEntity {
     @ApiModelProperty("用户id")
+    @ExcelProperty("用户id")
     private Long             userId;
     @ApiModelProperty("销毁藏品id")
+    @ExcelProperty("销毁藏品id")
     private Long             destroyAssetId;
     @ApiModelProperty("销毁藏品名称")
+    @ExcelProperty("销毁藏品名称")
     private String           destroyAssetName;
     @ApiModelProperty("销毁藏品编号")
+    @ExcelProperty("销毁藏品编号")
     private String           destroyAssetNumber;
     @ApiModelProperty("销毁藏品图片")
     @Column(columnDefinition = "TEXT")
     @Convert(converter = FileObjectConverter.class)
     private FileObject       destroyAssetPicture;
     @ApiModelProperty("用户名")
+    @ExcelProperty("用户名")
     private String           userName;
     @ApiModelProperty("用户头像")
     private String           userAvatar;
     @ApiModelProperty("图片名称")
+    @ExcelProperty("图片名称")
     private String           picName;
     @ApiModelProperty("图片描述")
+    @ExcelProperty("图片描述")
     @Column(columnDefinition = "TEXT")
     private String           picDesc;
     @ApiModelProperty("图片")
@@ -45,9 +59,28 @@ public class PhotoAsset extends BaseEntity {
 
     private String auditResult;
 
+    @ExcelProperty("创建藏品id")
     private Long createAssetId;
 
+    @ExcelProperty("拥有者id")
     private Long ownerId;
 
     private boolean gifted;
+
+    @ApiModelProperty("交易ID")
+    @ExcelProperty("交易id")
+    @Searchable
+    @Column(length = 90)
+    private String transactionId;
+
+    @Enumerated(EnumType.STRING)
+    private OrderStatus orderStatus;
+
+    @Enumerated(EnumType.STRING)
+    private PayMethod payMethod;
+
+    private boolean destroyed;
+
+    @ExcelProperty("价格")
+    private BigDecimal price;
 }

+ 2 - 0
src/main/java/com/izouma/nineth/domain/Tag.java

@@ -26,5 +26,7 @@ public class Tag {
 
     private String remark;
 
+    @Column(columnDefinition = "bigint default 1 not null")
+    private Long companyId = 1L;
 
 }

+ 2 - 1
src/main/java/com/izouma/nineth/enums/PayMethod.java

@@ -7,7 +7,8 @@ public enum PayMethod {
     SANDPAY("衫德支付"),
     HMPAY("河马支付"),
     PAYEASE("首信易"),
-    BALANCE("余额支付");
+    BALANCE("余额支付"),
+    DESTROY("销毁藏品");
 
     private final String description;
 

+ 1 - 0
src/main/java/com/izouma/nineth/event/OrderNotifyEvent.java

@@ -16,6 +16,7 @@ public class OrderNotifyEvent implements Serializable {
     public static final String TYPE_GIFT_ORDER = "gift_order";
     public static final String TYPE_RECHARGE   = "recharge";
     public static final String TYPE_AUCTION_ORDER   = "auction_order";
+    public static final String TYPE_PIC   = "pic_order";
 
     private Long      orderId;
     private PayMethod payMethod;

+ 6 - 0
src/main/java/com/izouma/nineth/listener/OrderNotifyListener.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.listener;
 
+import com.izouma.nineth.domain.PhotoAsset;
 import com.izouma.nineth.event.OrderNotifyEvent;
 import com.izouma.nineth.service.*;
 import lombok.AllArgsConstructor;
@@ -24,6 +25,7 @@ public class OrderNotifyListener implements RocketMQListener<OrderNotifyEvent> {
     private GiftOrderService    giftOrderService;
     private UserBalanceService  userBalanceService;
     private AuctionOrderService auctionOrderService;
+    private PhotoAssetService   photoAssetService;
 
     @Override
     public void onMessage(OrderNotifyEvent e) {
@@ -44,6 +46,10 @@ public class OrderNotifyListener implements RocketMQListener<OrderNotifyEvent> {
                 //拍卖回调
                 auctionOrderService.notify(e.getOrderId(), e.getPayMethod(), e.getTransactionId());
                 break;
+            case OrderNotifyEvent.TYPE_PIC:
+                //星图回调
+                photoAssetService.notify(e.getOrderId(), e.getPayMethod(), e.getTransactionId());
+                break;
             case OrderNotifyEvent.TYPE_ORDER:
             default:
                 orderService.notifyOrder(e.getOrderId(), e.getPayMethod(), e.getTransactionId());

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

@@ -79,7 +79,7 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
     int updateCDN(Long id, String pic, String model3d, String minterAvatar,
                   String ownerAvatar, String detail);
 
-    Page<Asset> findByUserIdAndStatusAndNameLike(Long userId, AssetStatus status, String name, Pageable pageable);
+    Page<Asset> findByUserIdAndStatusAndCompanyIdAndNameLike(Long userId, AssetStatus status, Long companyId, String name, Pageable pageable);
 
     List<Asset> findAllByOasisIdInAndStatusIn(List<Long> oasisIds, List<AssetStatus> assetStatuses);
 

+ 3 - 0
src/main/java/com/izouma/nineth/repo/CollectionRepo.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.repo;
 
+import com.fasterxml.jackson.annotation.JsonView;
 import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.dto.CollectionInfoDTO;
 import com.izouma.nineth.dto.CollectionStockAndSale;
@@ -48,12 +49,14 @@ public interface CollectionRepo extends JpaRepository<Collection, Long>, JpaSpec
                 Integer totalQuota, BigDecimal minimumCharge);
 
     @Cacheable("collection")
+    @JsonView(Collection.View.Detail.class)
     Optional<Collection> findById(@Nonnull Long id);
 
     @Query("select c from Collection c where c.del = false and c.id = ?1")
     Optional<Collection> findDetailById(@Nonnull Long id);
 
     @Cacheable("collectionInfo")
+    @JsonView(Collection.View.Detail.class)
     @Query("select new com.izouma.nineth.dto.CollectionInfoDTO(c,cp) from Collection c left join CollectionPrivilege cp " +
             "on c.id = cp.collectionId where c.id = ?1 ")
     Optional<CollectionInfoDTO> findInfoById(@Nonnull Long id);

+ 7 - 1
src/main/java/com/izouma/nineth/repo/PhotoAssetRepo.java

@@ -2,12 +2,14 @@ package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.PhotoAsset;
 import com.izouma.nineth.enums.CollectionStatus;
+import com.izouma.nineth.enums.OrderStatus;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.time.LocalDateTime;
 import java.util.List;
 
 public interface PhotoAssetRepo extends JpaRepository<PhotoAsset, Long>, JpaSpecificationExecutor<PhotoAsset> {
@@ -16,7 +18,11 @@ public interface PhotoAssetRepo extends JpaRepository<PhotoAsset, Long>, JpaSpec
     @Transactional
     void softDelete(Long id);
 
-    List<PhotoAsset> findAllByStatusAndAuditResultNotNull(CollectionStatus collectionStatus);
+    List<PhotoAsset> findAllByStatusAndOrderStatus(CollectionStatus collectionStatus, OrderStatus orderStatus);
+
+    List<PhotoAsset> findAllByOrderStatus(OrderStatus orderStatus);
+
+    List<PhotoAsset> findByOrderStatusAndCreatedAtBeforeAndDelFalse(OrderStatus orderStatus, LocalDateTime localDateTime);
 
     PhotoAsset findFirstByCreateAssetId(Long id);
 }

+ 16 - 16
src/main/java/com/izouma/nineth/repo/TagRepo.java

@@ -11,38 +11,38 @@ import javax.transaction.Transactional;
 public interface TagRepo extends JpaRepository<Tag, Long>, JpaSpecificationExecutor<Tag> {
 
     @Query(nativeQuery = true, value = "insert into asset_tag (asset_id, tag_id) " +
-            "select id, ?1 from asset where name like ?2")
+            "select id, ?1 from asset where name like ?2 and company_id = ?3")
     @Transactional
     @Modifying
-    int addTagForAssetEasy(Long id, String pattern);
+    int addTagForAssetEasy(Long id, String pattern, Long companyId);
 
     @Query(nativeQuery = true, value = "insert into collection_tag (collection_id, tag_id) " +
-            "select id, ?1 from collection_info where name like ?2")
+            "select id, ?1 from collection_info where name like ?2 and company_id = ?3")
     @Transactional
     @Modifying
-    int addTagForCollectionEasy(Long id, String pattern);
+    int addTagForCollectionEasy(Long id, String pattern , Long companyId);
 
     @Query(nativeQuery = true, value = "insert into asset_tag (asset_id, tag_id) " +
-            "select id, ?1 from asset where name regexp ?2")
+            "select id, ?1 from asset where name regexp ?2 and company_id = ?3")
     @Transactional
     @Modifying
-    int addTagForAssetRegex(Long id, String pattern);
+    int addTagForAssetRegex(Long id, String pattern , Long companyId);
 
     @Query(nativeQuery = true, value = "insert into collection_tag (collection_id, tag_id) " +
-            "select id, ?1 from collection_info where name regexp ?2")
+            "select id, ?1 from collection_info where name regexp ?2 and company_id = ?3")
     @Transactional
     @Modifying
-    int addTagForCollectionRegex(Long id, String pattern);
+    int addTagForCollectionRegex(Long id, String pattern , Long companyId);
 
-    @Query(nativeQuery = true, value = "select count(id) from asset where name like ?1")
-    long countAssetEasy(String pattern);
+    @Query(nativeQuery = true, value = "select count(id) from asset where name like ?1 and company_id = ?2")
+    long countAssetEasy(String pattern, Long companyId);
 
-    @Query(nativeQuery = true, value = "select count(id) from collection_info where name like ?1")
-    long countCollectionEasy(String pattern);
+    @Query(nativeQuery = true, value = "select count(id) from collection_info where name like ?1 and company_id = ?2")
+    long countCollectionEasy(String pattern, Long companyId);
 
-    @Query(nativeQuery = true, value = "select count(id) from asset where name regexp ?1")
-    long countAssetRegex(String pattern);
+    @Query(nativeQuery = true, value = "select count(id) from asset where name regexp ?1 and company_id = ?2")
+    long countAssetRegex(String pattern, Long companyId);
 
-    @Query(nativeQuery = true, value = "select count(id) from collection_info where name regexp ?1")
-    long countCollectionRegex(String pattern);
+    @Query(nativeQuery = true, value = "select count(id) from collection_info where name regexp ?1 and company_id = ?2")
+    long countCollectionRegex(String pattern, Long companyId);
 }

+ 5 - 3
src/main/java/com/izouma/nineth/repo/UserAssetSummaryRepo.java

@@ -16,18 +16,19 @@ public interface UserAssetSummaryRepo extends JpaRepository<UserAssetSummary, Lo
     @Transactional
     @Modifying
     void deleteByUserIdAndCompanyId(Long userId, Long companyId);
+
     @Query(value = "SELECT " +
             "  a.created_at created_at, " +
             "  a.id id, " +
             "  a.id asset_id, " +
             "  a.user_id, " +
             "  a.prefix_name, " +
-            "  a.pic, " +
+            "  z.pic, " +
             "  a.minter, " +
             "  a.opened, " +
             "  a.type, " +
             "  a.status, " +
-            "  a.number, " +
+            "  z.number, " +
             "  a.name, " +
             "  a.public_show, " +
             "  a.consignment, " +
@@ -40,7 +41,7 @@ public interface UserAssetSummaryRepo extends JpaRepository<UserAssetSummary, Lo
             "FROM " +
             "  ( " +
             "  SELECT " +
-            "    id, " +
+            "    max(id) id, " +
             "    user_id, " +
             "    prefix_name, " +
             "    pic, " +
@@ -66,6 +67,7 @@ public interface UserAssetSummaryRepo extends JpaRepository<UserAssetSummary, Lo
             "  GROUP BY " +
             "    prefix_name  " +
             "  ) a " +
+            "LEFT JOIN asset z on a.id = z.id" +
             "  LEFT JOIN ( " +
             "  SELECT " +
             "    user_id userId, " +

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

@@ -118,7 +118,7 @@ public class AirDropService {
                                 Asset asset = assetService.createAsset(winItem, user, null, null, "空投",
                                         winItem.getTotal() > 1 ?
                                                 collectionService.getNextNumber(winItem.getCollectionId()) : null,
-                                        collection.getHoldDays(), false);
+                                        winCollection.getHoldDays(), false);
                                 //铸造空投的t+0
 //                                if (record.isAuto()) {
 //                                    assetRepo.updateHoldDays(asset.getId(), 0);

+ 11 - 6
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -388,6 +388,9 @@ public class AssetService {
 
     public synchronized void consignment(Long id, BigDecimal price, String tradeCode, boolean safeFlag) {
         Asset asset = assetRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        if (Objects.nonNull(asset.getType()) && asset.getType().equals(CollectionType.SHOWROOM)) {
+            throw new BusinessException("展厅类型的藏品不能上架");
+        }
         if (!asset.getUserId().equals(SecurityUtils.getAuthenticatedUser().getId())) {
             throw new BusinessException("此藏品不属于你");
         }
@@ -529,6 +532,7 @@ public class AssetService {
             collectionRepo.findById(asset.getPublicCollectionId())
                     .ifPresent(collection -> {
                         collection.setSalable(false);
+                        collection.setOnShelf(false);
                         collectionRepo.save(collection);
                     });
         }
@@ -904,17 +908,18 @@ public class AssetService {
     }
 
     //    @Cacheable(cacheNames = "fmaa", key = "#userId+'#'+#mintActivityId+'#'+#pageable.hashCode()")
-    public PageWrapper<Asset> findMintActivityAssetsWrap(Long userId, Long mintActivityId, Pageable pageable) {
-        return PageWrapper.of(findMintActivityAssets(userId, mintActivityId, pageable));
+    public PageWrapper<Asset> findMintActivityAssetsWrap(Long userId, Long mintActivityId, Long companyId, Pageable pageable) {
+        return PageWrapper.of(findMintActivityAssets(userId, mintActivityId, companyId, pageable));
     }
 
-    public Page<Asset> findMintActivityAssets(Long userId, Long mintActivityId, Pageable pageable) {
+    public Page<Asset> findMintActivityAssets(Long userId, Long mintActivityId, Long companyId, Pageable pageable) {
         MintActivity mintActivity = mintActivityRepo.findById(mintActivityId).orElse(null);
         if (mintActivity == null) return new PageImpl<>(Collections.emptyList());
-        return findMintActivityAssetsCommon(userId, new CommonMatchDTO(mintActivity.getRule(), mintActivity.isAudit(), mintActivity.getCollectionName()), pageable);
+        return findMintActivityAssetsCommon(userId, companyId, new CommonMatchDTO(mintActivity.getRule(),
+                mintActivity.isAudit(), mintActivity.getCollectionName()), pageable);
     }
 
-    public Page<Asset> findMintActivityAssetsCommon(Long userId, CommonMatchDTO commonMatchDTO, Pageable pageable) {
+    public Page<Asset> findMintActivityAssetsCommon(Long userId, Long companyId, CommonMatchDTO commonMatchDTO, Pageable pageable) {
         if (!commonMatchDTO.isAudit()) {
             Set<Tag> tags = commonMatchDTO.getRule().getTags();
             if (tags.isEmpty()) return new PageImpl<>(Collections.emptyList());
@@ -932,7 +937,7 @@ public class AssetService {
                                     root.join("tags").get("id").in(tags.stream().map(Tag::getId).toArray()))
                             .getRestriction(), pageable);
         } else {
-            return assetRepo.findByUserIdAndStatusAndNameLike(userId, AssetStatus.NORMAL,
+            return assetRepo.findByUserIdAndStatusAndCompanyIdAndNameLike(userId, AssetStatus.NORMAL, companyId,
                     "%" + commonMatchDTO.getCollectionName() + "%", pageable);
         }
     }

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

@@ -70,7 +70,9 @@ public class AuctionActivityService {
 
     public AuctionActivity createFromAsset(AuctionInputDTO dto) {
         Asset asset = assetRepo.findById(dto.getAssetId()).orElseThrow(new BusinessException("暂无"));
-
+        if (Objects.nonNull(asset.getType()) && asset.getType().equals(CollectionType.SHOWROOM)) {
+            throw new BusinessException("展厅类型的藏品不能拍卖");
+        }
         AuctionActivity auctionActivity = new AuctionActivity();
         auctionActivity.setAuctionType(AuctionType.NFT);
         auctionActivity.setAssetId(dto.getAssetId());

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

@@ -170,7 +170,7 @@ public class ContentAuditService {
                             String scene = ((JSONObject) sceneResult).getString("scene");
                             String suggestion = ((JSONObject) sceneResult).getString("suggestion");
                             if (StringUtils.equals(suggestion, "pass")) {
-                                return false;
+                                return true;
                             }
                             // 根据scene和suggestion做相关处理。
                             // 根据不同的suggestion结果做业务上的不同处理。例如,将违规数据删除等。
@@ -191,6 +191,6 @@ public class ContentAuditService {
                 throw new BusinessException("审核失败");
             }
         }
-        return true;
+        return false;
     }
 }

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

@@ -123,7 +123,6 @@ public class MintOrderService {
     }
 
     @Transactional
-    @RedisLock(value = "'mintOrderLock'+#{userId}", expire = 30)
     public void create(Long userId, List<Long> assetIds) {
         User user = userRepo.findByIdAndDelFalse(userId).orElseThrow(new BusinessException("用户不存在"));
         User blackHole = userRepo.findByIdAndDelFalse(Constants.BLACK_HOLE_USER_ID)
@@ -198,6 +197,7 @@ public class MintOrderService {
      * @param addressId      地址
      */
 //    @Transactional
+    @RedisLock(value = "'mintOrderLock'+#{userId}", expire = 30)
     public MintOrder create(User user, List<Long> assetId, Long mintActivityId, Long addressId) {
         // 参加的活动
         MintActivity mintActivity = mintActivityRepo.findByIdAndDelFalse(mintActivityId)
@@ -549,7 +549,7 @@ public class MintOrderService {
                             .collectionId(mintActivity.getAirDropCollectionId())
                             .targets(Collections.singletonList(new DropTarget(user.getId(), user.getPhone(), user.getNickname(), 1)))
                             .auto(true)
-                            .companyId(1L)
+                            .companyId(mintActivity.getCompanyId())
                             .build());
                     mintOrder.setStatus(MintOrderStatus.FINISH);
                     mintOrderRepo.save(mintOrder);

+ 18 - 0
src/main/java/com/izouma/nineth/service/OrderCancelService.java

@@ -40,6 +40,8 @@ public class OrderCancelService {
     private final RedisTemplate<String, Object> redisTemplate;
     private final AuctionOrderRepo              auctionOrderRepo;
     private final AuctionOrderService           auctionOrderService;
+    private final PhotoAssetService             photoAssetService;
+    private final PhotoAssetRepo                photoAssetRepo;
 
     private static int orderCancelInterval = 210;
 
@@ -103,6 +105,22 @@ public class OrderCancelService {
         });
     }
 
+    @Scheduled(fixedRate = 30000, initialDelay = 30000)
+    @RedisLock(value = "pic_order_batch_cancel", expire = 3, unit = TimeUnit.MINUTES)
+    public void batchCancelPicOrder() {
+        List<PhotoAsset> orders = photoAssetRepo.findByOrderStatusAndCreatedAtBeforeAndDelFalse(OrderStatus.NOT_PAID,
+                LocalDateTime.now().minusSeconds(orderCancelInterval));
+        orders.forEach(o -> {
+            try {
+                PhotoAsset order = photoAssetRepo.findById(o.getId()).orElseThrow(new BusinessException("订单不存在"));
+                if (order.getOrderStatus() == OrderStatus.NOT_PAID && canCancel(order.getId().toString())) {
+                    photoAssetService.cancel(order);
+                }
+            } catch (Exception ignored) {
+            }
+        });
+    }
+
     private boolean canCancel(String id) {
         String channel = null;
         Object payTmp = redisTemplate.opsForValue().get(RedisKeys.PAY_TMP + id);

+ 153 - 27
src/main/java/com/izouma/nineth/service/OrderPayService.java

@@ -65,6 +65,8 @@ public class OrderPayService {
     private final AlipayClient        alipayClient;
     private final AlipayProperties    alipayProperties;
     private final AlipayService       alipayService;
+    private final PhotoAssetRepo      photoAssetRepo;
+    private final PhotoAssetService   photoAssetService;
 
     public static void setPayChannel(String payChannel) {
         log.info("set pay channel {}", payChannel);
@@ -127,11 +129,14 @@ public class OrderPayService {
 
         String qrCode = aliRequest(orderId, order.getTotalPrice(), order.getName(), Constants.OrderNotifyType.ORDER);
 
-        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("User-Agent");
+        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()
+                .getHeader("User-Agent");
         if (ua.toLowerCase().contains("micromessenger")) {
-            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder.encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
+            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder
+                    .encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
                     + "&orderId=" + orderId + "&type=order&returnUrl="
-                    + URLEncoder.encode(generalProperties.resolveFrontUrl(order.getCompanyId(), "/store"), StandardCharsets.UTF_8);
+                    + URLEncoder
+                    .encode(generalProperties.resolveFrontUrl(order.getCompanyId(), "/store"), StandardCharsets.UTF_8);
         } else {
             return Constants.ALIPAY_URL_SCHEME + qrCode;
         }
@@ -154,7 +159,8 @@ public class OrderPayService {
         if (order.getStatus() != OrderStatus.NOT_PAID) {
             throw new BusinessException("订单状态错误");
         }
-        IdentityAuth identityAuth = identityAuthRepo.findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
+        IdentityAuth identityAuth = identityAuthRepo
+                .findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
                 .orElseThrow(new BusinessException("请先完成实名认证"));
         return sandPayService.payQuickBind(orderId + "", order.getName(), order.getTotalPrice(),
                 order.getCreatedAt().plusMinutes(3), Constants.OrderNotifyType.ORDER,
@@ -168,7 +174,8 @@ public class OrderPayService {
             throw new BusinessException("订单状态错误");
         }
         checkTradeCode(userId, tradeCode, order.getUserId());
-        BalanceRecord record = userBalanceService.balancePay(order.getUserId(), order.getTotalPrice(), orderId, order.getName());
+        BalanceRecord record = userBalanceService
+                .balancePay(order.getUserId(), order.getTotalPrice(), orderId, order.getName());
         rocketMQTemplate.syncSend(generalProperties.getOrderNotifyTopic(),
                 new OrderNotifyEvent(orderId, PayMethod.BALANCE, record.getId().toString(),
                         System.currentTimeMillis()));
@@ -219,7 +226,8 @@ public class OrderPayService {
                 return hmPayService.requestAlipay(orderId + "", order.getGasPrice(),
                         "转赠" + order.getAssetId(),
                         HMPayService.getTimeout(order.getCreatedAt(), 180),
-                        Constants.OrderNotifyType.GIFT, generalProperties.resolveFrontUrl(order.getCompanyId(), "/store"));
+                        Constants.OrderNotifyType.GIFT, generalProperties
+                                .resolveFrontUrl(order.getCompanyId(), "/store"));
         }
         throw new BusinessException(Constants.PAY_ERR_MSG);
     }
@@ -233,11 +241,14 @@ public class OrderPayService {
 
         String qrCode = aliRequest(orderId, order.getGasPrice(), "转赠", Constants.OrderNotifyType.GIFT);
 
-        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("User-Agent");
+        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()
+                .getHeader("User-Agent");
         if (ua.toLowerCase().contains("micromessenger")) {
-            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder.encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
+            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder
+                    .encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
                     + "&orderId=" + orderId + "&type=gift&returnUrl="
-                    + URLEncoder.encode(generalProperties.resolveFrontUrl(order.getCompanyId(), "/store"), StandardCharsets.UTF_8);
+                    + URLEncoder
+                    .encode(generalProperties.resolveFrontUrl(order.getCompanyId(), "/store"), StandardCharsets.UTF_8);
         } else {
             return Constants.ALIPAY_URL_SCHEME + qrCode;
         }
@@ -260,7 +271,8 @@ public class OrderPayService {
         if (order.getStatus() != OrderStatus.NOT_PAID) {
             throw new BusinessException("订单状态错误");
         }
-        IdentityAuth identityAuth = identityAuthRepo.findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
+        IdentityAuth identityAuth = identityAuthRepo
+                .findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
                 .orElseThrow(new BusinessException("请先完成实名认证"));
         return sandPayService.payQuickBind(orderId + "", "转赠" + order.getAssetId(), order.getGasPrice(),
                 order.getCreatedAt().plusMinutes(3), Constants.OrderNotifyType.GIFT,
@@ -309,7 +321,8 @@ public class OrderPayService {
                 return hmPayService.requestAlipay(orderId + "", order.getGasPrice(),
                         "铸造活动:" + order.getMintActivityId(),
                         HMPayService.getTimeout(order.getCreatedAt(), 180),
-                        Constants.OrderNotifyType.MINT, generalProperties.resolveFrontUrl(order.getCompanyId(), "/home"));
+                        Constants.OrderNotifyType.MINT, generalProperties
+                                .resolveFrontUrl(order.getCompanyId(), "/home"));
         }
         throw new BusinessException("绿洲宇宙冷却系统已启动,请稍后支付");
     }
@@ -321,13 +334,17 @@ public class OrderPayService {
             throw new BusinessException("订单状态错误");
         }
 
-        String qrCode = aliRequest(orderId, order.getGasPrice(), "铸造活动:" + order.getMintActivityId(), Constants.OrderNotifyType.MINT);
+        String qrCode = aliRequest(orderId, order.getGasPrice(), "铸造活动:" + order
+                .getMintActivityId(), Constants.OrderNotifyType.MINT);
 
-        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("User-Agent");
+        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()
+                .getHeader("User-Agent");
         if (ua.toLowerCase().contains("micromessenger")) {
-            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder.encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
+            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder
+                    .encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
                     + "&orderId=" + orderId + "&type=mintOrder&returnUrl="
-                    + URLEncoder.encode(generalProperties.resolveFrontUrl(order.getCompanyId(), "/home"), StandardCharsets.UTF_8);
+                    + URLEncoder
+                    .encode(generalProperties.resolveFrontUrl(order.getCompanyId(), "/home"), StandardCharsets.UTF_8);
         } else {
             return Constants.ALIPAY_URL_SCHEME + qrCode;
         }
@@ -350,7 +367,8 @@ public class OrderPayService {
         if (order.getStatus() != MintOrderStatus.NOT_PAID) {
             throw new BusinessException("订单状态错误");
         }
-        IdentityAuth identityAuth = identityAuthRepo.findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
+        IdentityAuth identityAuth = identityAuthRepo
+                .findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
                 .orElseThrow(new BusinessException("请先完成实名认证"));
         return sandPayService.payQuickBind(orderId + "", "铸造活动:" + order.getMintActivityId(),
                 order.getGasPrice(), order.getCreatedAt().plusMinutes(3), Constants.OrderNotifyType.MINT,
@@ -401,7 +419,8 @@ public class OrderPayService {
     private Long getCompanyId() {
         Long companyId = 1L;
         try {
-            String hCompanyId = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("companyId");
+            String hCompanyId = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()
+                    .getHeader("companyId");
             if (StringUtils.isNotBlank(hCompanyId)) {
                 companyId = Long.parseLong(hCompanyId);
             }
@@ -457,11 +476,14 @@ public class OrderPayService {
 
         String qrCode = aliRequest(order.getId(), order.getAmount(), "余额充值", Constants.OrderNotifyType.RECHARGE);
 
-        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("User-Agent");
+        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()
+                .getHeader("User-Agent");
         if (ua.toLowerCase().contains("micromessenger")) {
-            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder.encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
+            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder
+                    .encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
                     + "&orderId=" + order.getId() + "&type=recharge&returnUrl="
-                    + URLEncoder.encode(generalProperties.resolveFrontUrl(getCompanyId(), "/home"), StandardCharsets.UTF_8);
+                    + URLEncoder
+                    .encode(generalProperties.resolveFrontUrl(getCompanyId(), "/home"), StandardCharsets.UTF_8);
         } else {
             return Constants.ALIPAY_URL_SCHEME + qrCode;
         }
@@ -521,7 +543,8 @@ public class OrderPayService {
         if (amount.compareTo(new BigDecimal("50000")) > 0) {
             throw new BusinessException("充值金额不能大于50000");
         }
-        IdentityAuth identityAuth = identityAuthRepo.findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(userId, AuthStatus.SUCCESS)
+        IdentityAuth identityAuth = identityAuthRepo
+                .findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(userId, AuthStatus.SUCCESS)
                 .orElseThrow(new BusinessException("请先完成实名认证"));
         RechargeOrder order = RechargeOrder.builder()
                 .id(snowflakeIdWorker.nextId())
@@ -625,13 +648,17 @@ public class OrderPayService {
             throw new BusinessException("订单状态错误");
         }
 
-        String qrCode = aliRequest(orderId, order.getTotalPrice(), "拍卖:" + order.getName(), Constants.OrderNotifyType.AUCTION);
+        String qrCode = aliRequest(orderId, order.getTotalPrice(), "拍卖:" + order
+                .getName(), Constants.OrderNotifyType.AUCTION);
 
-        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("User-Agent");
+        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()
+                .getHeader("User-Agent");
         if (ua.toLowerCase().contains("micromessenger")) {
-            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder.encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
+            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder
+                    .encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
                     + "&orderId=" + orderId + "&type=auctionOrder&returnUrl="
-                    + URLEncoder.encode(generalProperties.resolveFrontUrl(getCompanyId(), "/home"), StandardCharsets.UTF_8);
+                    + URLEncoder
+                    .encode(generalProperties.resolveFrontUrl(getCompanyId(), "/home"), StandardCharsets.UTF_8);
         } else {
             return Constants.ALIPAY_URL_SCHEME + qrCode;
         }
@@ -643,7 +670,8 @@ public class OrderPayService {
         if (order.getStatus() != AuctionOrderStatus.NOT_PAID) {
             throw new BusinessException("订单状态错误");
         }
-        IdentityAuth identityAuth = identityAuthRepo.findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
+        IdentityAuth identityAuth = identityAuthRepo
+                .findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
                 .orElseThrow(new BusinessException("请先完成实名认证"));
         return sandPayService.payQuick(orderId + "", "拍卖:" + order.getName(),
                 order.getTotalPrice(), order.getCreatedAt().plusMinutes(3), Constants.OrderNotifyType.AUCTION,
@@ -656,7 +684,8 @@ public class OrderPayService {
         if (order.getStatus() != AuctionOrderStatus.NOT_PAID) {
             throw new BusinessException("订单状态错误");
         }
-        IdentityAuth identityAuth = identityAuthRepo.findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
+        IdentityAuth identityAuth = identityAuthRepo
+                .findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
                 .orElseThrow(new BusinessException("请先完成实名认证"));
         return sandPayService.payQuickBind(orderId + "", "拍卖:" + order.getName(),
                 order.getTotalPrice(), order.getCreatedAt().plusMinutes(3), Constants.OrderNotifyType.AUCTION,
@@ -690,4 +719,101 @@ public class OrderPayService {
         return payEaseService.pay("拍卖:" + order.getAuctionId(), orderId.toString(), order.getTotalPrice(),
                 order.getUserId().toString(), bindCardId, Constants.OrderNotifyType.AUCTION);
     }
+
+    @Cacheable(value = "payOrder", key = "'picOrder#'+#orderId")
+    public String payPicOrder(Long orderId) {
+        PhotoAsset order = photoAssetRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        if (order.getOrderStatus() != OrderStatus.NOT_PAID) {
+            throw new BusinessException("订单状态错误");
+        }
+        switch (PAY_CHANNEL) {
+            case Constants.PayChannel.SAND:
+                return sandPayService.pay(orderId + "", "星图:" + order.getPicName(), order.getPrice(),
+                        order.getCreatedAt().plusMinutes(3), Constants.OrderNotifyType.PIC);
+            case Constants.PayChannel.HM:
+                return hmPayService.requestAlipay(orderId + "", order.getPrice(),
+                        "星图:" + order.getPicName(), HMPayService.getTimeout(order.getCreatedAt(), 180),
+                        Constants.OrderNotifyType.PIC, generalProperties.resolveFrontUrl(getCompanyId(), "/orderDetail?id=" + orderId));
+        }
+        throw new BusinessException("绿洲宇宙冷却系统已启动,请稍后支付");
+    }
+
+    @Cacheable(value = "payOrder", key = "'picOrder#'+#orderId")
+    public String payPicAli(Long orderId) {
+        PhotoAsset order = photoAssetRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        if (order.getOrderStatus() != OrderStatus.NOT_PAID) {
+            throw new BusinessException("订单状态错误");
+        }
+
+        String qrCode = aliRequest(orderId, order.getPrice(), "星图:" + order
+                .getPicName(), Constants.OrderNotifyType.PIC);
+
+        String ua = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()
+                .getHeader("User-Agent");
+        if (ua.toLowerCase().contains("micromessenger")) {
+            return "/static/wx_alipay_bridge.html?payUrl=" + URLEncoder
+                    .encode(Constants.ALIPAY_URL_SCHEME + qrCode, StandardCharsets.UTF_8)
+                    + "&orderId=" + orderId + "&type=pic&returnUrl="
+                    + URLEncoder
+                    .encode(generalProperties.resolveFrontUrl(getCompanyId(), "/orderDetail?id=" + orderId), StandardCharsets.UTF_8);
+        } else {
+            return Constants.ALIPAY_URL_SCHEME + qrCode;
+        }
+    }
+
+    @Cacheable(value = "payOrder", key = "'picOrder#'+#orderId")
+    public String payPicQuick(Long orderId) {
+        PhotoAsset order = photoAssetRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        if (order.getOrderStatus() != OrderStatus.NOT_PAID) {
+            throw new BusinessException("订单状态错误");
+        }
+        IdentityAuth identityAuth = identityAuthRepo
+                .findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
+                .orElseThrow(new BusinessException("请先完成实名认证"));
+        return sandPayService.payQuick(orderId + "", "星图:" + order.getPicName(),
+                order.getPrice(), order.getCreatedAt().plusMinutes(3), Constants.OrderNotifyType.PIC,
+                generalProperties.resolveFrontUrl(getCompanyId(), "/orderDetail?id=" + orderId));
+    }
+
+    @Cacheable(value = "payOrder", key = "'picOrder#'+#orderId")
+    public String payPicQuickBind(Long orderId) {
+        PhotoAsset order = photoAssetRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        if (order.getOrderStatus() != OrderStatus.NOT_PAID) {
+            throw new BusinessException("订单状态错误");
+        }
+        IdentityAuth identityAuth = identityAuthRepo
+                .findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(order.getUserId(), AuthStatus.SUCCESS)
+                .orElseThrow(new BusinessException("请先完成实名认证"));
+        return sandPayService.payQuickBind(orderId + "", "星图:" + order.getPicName(),
+                order.getPrice(), order.getCreatedAt().plusMinutes(3), Constants.OrderNotifyType.PIC,
+                generalProperties.resolveFrontUrl(getCompanyId(), "/orderDetail?id=" + orderId),
+                order.getUserId(), identityAuth.getRealName(), identityAuth.getIdNo());
+    }
+
+    public void payPicOrderBalance(Long orderId, Long userId, String tradeCode) {
+        PhotoAsset order = photoAssetRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        if (order.getOrderStatus() != OrderStatus.NOT_PAID) {
+            throw new BusinessException("订单状态错误");
+        }
+        checkTradeCode(userId, tradeCode, order.getUserId());
+        BalanceRecord record = userBalanceService.balancePay(order.getUserId(), order.getPrice(), orderId, "星图");
+        photoAssetService.notify(orderId, PayMethod.BALANCE, record.getId().toString());
+    }
+
+    @Cacheable(value = "payOrder", key = "'picOrder#'+#orderId")
+    public Map<String, Object> payPicOrderAgreement(Long orderId, String bindCardId) {
+        PhotoAsset order = photoAssetRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        if (order.getOrderStatus() != OrderStatus.NOT_PAID) {
+            throw new BusinessException("订单状态错误");
+        }
+        if (StringUtils.isEmpty(bindCardId)) {
+            bindCardId = userBankCardRepo.findByUserId(order.getUserId())
+                    .stream().map(UserBankCard::getBindCardId).findFirst().orElse(null);
+        }
+        if (StringUtils.isEmpty(bindCardId)) {
+            throw new BusinessException("请先绑定银行卡");
+        }
+        return payEaseService.pay("星图:" + order.getPicName(), orderId.toString(), order.getPrice(),
+                order.getUserId().toString(), bindCardId, Constants.OrderNotifyType.PIC);
+    }
 }

+ 72 - 19
src/main/java/com/izouma/nineth/service/PhotoAssetService.java

@@ -7,6 +7,7 @@ import com.izouma.nineth.domain.PhotoAsset;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.enums.CollectionStatus;
 import com.izouma.nineth.enums.OperationSource;
+import com.izouma.nineth.enums.*;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.AssetRepo;
 import com.izouma.nineth.repo.PhotoAssetRepo;
@@ -15,6 +16,7 @@ import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.core.env.Environment;
+import org.springframework.data.annotation.Transient;
 import org.springframework.data.domain.Page;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -43,33 +45,47 @@ public class PhotoAssetService {
     }
 
     public PhotoAsset save(PhotoAsset record) {
-        //将选取的藏品取消上架
-        Asset asset = assetService.cancelConsignmentAndStore(record.getDestroyAssetId());
         record.setStatus(CollectionStatus.PENDING);
-        record.setUserAvatar(asset.getOwnerAvatar());
-        record.setUserName(asset.getOwner());
-        record.setDestroyAssetName(asset.getName());
         record.setOwnerId(record.getOwnerId());
         record.setGifted(false);
-        if (asset.getNumber() != null) {
-            record.setDestroyAssetNumber(asset.getNumber().toString());
-        }
-        if (asset.getPic() != null) {
-            record.setDestroyAssetPicture(asset.getPic().get(0));
+        if (record.isDestroyed()) {
+            //将选取的藏品取消上架
+            record.setOrderStatus(OrderStatus.NOT_PAID);
+//            record.setPayMethod(PayMethod.DESTROY);
+            Asset asset = assetService.cancelConsignmentAndStore(record.getDestroyAssetId());
+            record.setUserAvatar(asset.getOwnerAvatar());
+            record.setUserName(asset.getOwner());
+            record.setDestroyAssetName(asset.getName());
+            if (asset.getNumber() != null) {
+                record.setDestroyAssetNumber(asset.getNumber().toString());
+            }
+            if (asset.getPic() != null) {
+                record.setDestroyAssetPicture(asset.getPic().get(0));
+            }
+            if (record.getPrice().compareTo(BigDecimal.ZERO) == 0) {
+                record.setOrderStatus(OrderStatus.FINISH);
+            }
+        } else {
+            record.setOrderStatus(OrderStatus.NOT_PAID);
         }
         return photoAssetRepo.save(record);
     }
 
     public void pass(PhotoAsset photoAsset) {
         //销毁原来的藏品
-        assetService.destroyWithoutTradeCode(photoAsset.getDestroyAssetId(), photoAsset.getUserId(), OperationSource.RAEX, null);
+        if (photoAsset.isDestroyed()) {
+            assetService.destroyWithoutTradeCode(photoAsset.getDestroyAssetId(), photoAsset
+                    .getUserId(), OperationSource.RAEX, null);
+        }
         //生成新的藏品
-        Long createId = assetService.createAsset(photoAsset, userRepo.findById(photoAsset.getUserId())
-                .orElseThrow(new BusinessException("无用户记录")), null, BigDecimal.ZERO, "星图", null, false).getId();
-        photoAsset.setStatus(CollectionStatus.SUCCESS);
-        photoAsset.setCreateAssetId(createId);
-        photoAsset.setOwnerId(photoAsset.getUserId());
-        photoAssetRepo.save(photoAsset);
+        if (photoAsset.getOrderStatus().equals(OrderStatus.FINISH)) {
+            Long createId = assetService.createAsset(photoAsset, userRepo.findById(photoAsset.getUserId())
+                    .orElseThrow(new BusinessException("无用户记录")), null, BigDecimal.ZERO, "星图", null, false).getId();
+            photoAsset.setStatus(CollectionStatus.SUCCESS);
+            photoAsset.setCreateAssetId(createId);
+            photoAsset.setOwnerId(photoAsset.getUserId());
+            photoAssetRepo.save(photoAsset);
+        }
     }
 
     public void deny(Long id) {
@@ -79,7 +95,9 @@ public class PhotoAssetService {
 //        Asset asset = assetRepo.findById(photoAsset.getDestroyAssetId()).orElseThrow(new BusinessException("无藏品记录"));
 //        asset.setStatus(AssetStatus.NORMAL);
 //        assetRepo.saveAndFlush(asset);
-        assetService.destroyWithoutTradeCode(photoAsset.getDestroyAssetId(), photoAsset.getUserId(), OperationSource.RAEX, null);;
+        assetService.destroyWithoutTradeCode(photoAsset.getDestroyAssetId(), photoAsset
+                .getUserId(), OperationSource.RAEX, null);
+        ;
         photoAssetRepo.save(photoAsset);
     }
 
@@ -91,7 +109,8 @@ public class PhotoAssetService {
             return;
         }
         try {
-            List<PhotoAsset> list = photoAssetRepo.findAllByStatusAndAuditResultNotNull(CollectionStatus.PENDING);
+            List<PhotoAsset> list = photoAssetRepo
+                    .findAllByStatusAndOrderStatus(CollectionStatus.PENDING, OrderStatus.FINISH);
             list.parallelStream().forEach(this::imageAudit);
         } catch (Exception e) {
             log.error("批量图片审核出错", e);
@@ -107,4 +126,38 @@ public class PhotoAssetService {
             pass(photoAsset);
         }
     }
+
+    @Transient
+    public void notify(Long id, PayMethod payMethod, String transactionId) {
+        PhotoAsset photoAsset = photoAssetRepo.findById(id).orElseThrow(new BusinessException("未找到星图"));
+        if (!photoAsset.getOrderStatus().equals(OrderStatus.NOT_PAID)) {
+            throw new BusinessException("订单已经处理");
+        }
+        photoAsset.setOrderStatus(OrderStatus.FINISH);
+        photoAsset.setPayMethod(payMethod);
+        photoAsset.setTransactionId(transactionId);
+        photoAssetRepo.save(photoAsset);
+    }
+
+//    @Scheduled(fixedRate = 30000)
+//    public void batchCancelPicOrder() {
+//        List<PhotoAsset> orders = photoAssetRepo
+//                .findAllByOrderStatus(OrderStatus.NOT_PAID);
+//        orders.parallelStream().forEach(o -> {
+//            try {
+//                PhotoAsset order = photoAssetRepo.findById(o.getId()).orElseThrow(new BusinessException("订单不存在"));
+//                if (order.getOrderStatus() == OrderStatus.NOT_PAID) {
+//                    cancel(order);
+//                }
+//            } catch (Exception e) {
+//                log.error("取消拍卖订单错误 " + o.getId(), e);
+//            }
+//        });
+//    }
+
+    public void cancel(PhotoAsset photoAsset) {
+        photoAsset.setOrderStatus(OrderStatus.CANCELLED);
+        photoAsset.setStatus(CollectionStatus.FAIL);
+        photoAssetRepo.save(photoAsset);
+    }
 }

+ 14 - 10
src/main/java/com/izouma/nineth/service/TagService.java

@@ -21,30 +21,34 @@ public class TagService {
         return tagRepo.findAll(JpaUtils.toSpecification(pageQuery, Tag.class), JpaUtils.toPageRequest(pageQuery));
     }
 
-    public Object checkAdd(String addMode, String pattern) {
+    public Object checkAdd(String addMode, String pattern, Long companyId) {
+        if (companyId == null) {
+            companyId = 1L;
+        }
         Map<String, Object> map = new HashMap<>();
         if ("easy".equals(addMode)) {
-            map.put("asset", tagRepo.countAssetEasy("%" + pattern + "%"));
-            map.put("collection", tagRepo.countCollectionEasy("%" + pattern + "%"));
+            map.put("asset", tagRepo.countAssetEasy("%" + pattern + "%", companyId));
+            map.put("collection", tagRepo.countCollectionEasy("%" + pattern + "%", companyId));
         } else if ("regex".equals(addMode)) {
-            map.put("asset", tagRepo.countAssetRegex(pattern));
-            map.put("collection", tagRepo.countCollectionRegex(pattern));
+            map.put("asset", tagRepo.countAssetRegex(pattern, companyId));
+            map.put("collection", tagRepo.countCollectionRegex(pattern, companyId));
         }
         return map;
     }
 
-    public Tag create(String name, String remark, boolean addForExist, String addMode, String pattern) {
+    public Tag create(String name, String remark, boolean addForExist, String addMode, String pattern, Long companyId) {
         Tag tag = tagRepo.saveAndFlush(Tag.builder()
                 .name(name)
                 .remark(remark)
+                .companyId(companyId)
                 .build());
         if (addForExist) {
             if ("easy".equals(addMode)) {
-                tagRepo.addTagForAssetEasy(tag.getId(), "%" + pattern + "%");
-                tagRepo.addTagForCollectionEasy(tag.getId(), "%" + pattern + "%");
+                tagRepo.addTagForAssetEasy(tag.getId(), "%" + pattern + "%", companyId);
+                tagRepo.addTagForCollectionEasy(tag.getId(), "%" + pattern + "%", companyId);
             } else if ("regex".equals(addMode)) {
-                tagRepo.addTagForAssetRegex(tag.getId(), pattern);
-                tagRepo.addTagForCollectionRegex(tag.getId(), pattern);
+                tagRepo.addTagForAssetRegex(tag.getId(), pattern, companyId);
+                tagRepo.addTagForCollectionRegex(tag.getId(), pattern, companyId);
             }
         }
         return tag;

+ 5 - 0
src/main/java/com/izouma/nineth/web/AlipayNotifyController.java

@@ -79,6 +79,11 @@ public class AlipayNotifyController {
                             new OrderNotifyEvent(orderId, PayMethod.ALIPAY, tradeNo,
                                     System.currentTimeMillis(), OrderNotifyEvent.TYPE_RECHARGE));
                     break;
+                case "picOrder":
+                    rocketMQTemplate.syncSend(generalProperties.getOrderNotifyTopic(),
+                            new OrderNotifyEvent(orderId, PayMethod.ALIPAY, tradeNo,
+                                    System.currentTimeMillis(), OrderNotifyEvent.TYPE_PIC));
+                    break;
                 case "auctionOrder":
                     rocketMQTemplate.syncSend(generalProperties.getOrderNotifyTopic(),
                             new OrderNotifyEvent(orderId, PayMethod.ALIPAY, tradeNo,

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

@@ -49,7 +49,7 @@ public class AssetController extends BaseController {
     private OrderRepo               orderRepo;
     private CacheService            cacheService;
     private UserAssetSummaryService userAssetSummaryService;
-    private CollectionRepo collectionRepo;
+    private CollectionRepo          collectionRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
 //    @PostMapping("/save")
@@ -187,12 +187,12 @@ public class AssetController extends BaseController {
 
     @GetMapping("/assetsForMint")
     @JsonView(Asset.View.Basic.class)
-    public Page<Asset> assetsForMint(@RequestParam Long mintActivityId, Boolean refresh, Pageable pageable) {
+    public Page<Asset> assetsForMint(@RequestParam Long mintActivityId, @RequestParam(defaultValue = "1") Long companyId, Boolean refresh, Pageable pageable) {
         if (Objects.equals(refresh, true)) {
             cacheService.clearFmaa();
         }
         return assetService.findMintActivityAssetsWrap(SecurityUtils.getAuthenticatedUser().getId(),
-                mintActivityId, pageable).toPage();
+                mintActivityId, companyId, pageable).toPage();
     }
 
     @GetMapping("/byTag")

+ 4 - 0
src/main/java/com/izouma/nineth/web/HmPayController.java

@@ -72,6 +72,10 @@ public class HmPayController extends BaseController {
                     rocketMQTemplate.syncSend(generalProperties.getOrderNotifyTopic(),
                             new OrderNotifyEvent(id, PayMethod.SANDPAY, plat_trx_no,
                                     System.currentTimeMillis(), OrderNotifyEvent.TYPE_AUCTION_ORDER));
+                case "picOrder":
+                    rocketMQTemplate.syncSend(generalProperties.getOrderNotifyTopic(),
+                            new OrderNotifyEvent(id, PayMethod.SANDPAY, plat_trx_no,
+                                    System.currentTimeMillis(), OrderNotifyEvent.TYPE_PIC));
                     break;
             }
         }

+ 4 - 3
src/main/java/com/izouma/nineth/web/MetaDestroyActivityController.java

@@ -27,7 +27,7 @@ import java.util.Objects;
 @AllArgsConstructor
 public class MetaDestroyActivityController extends BaseController {
     private MetaDestroyActivityService metaDestroyActivityService;
-    private MetaDestroyActivityRepo metaDestroyActivityRepo;
+    private MetaDestroyActivityRepo    metaDestroyActivityRepo;
 
     private AssetService assetService;
 
@@ -82,7 +82,7 @@ public class MetaDestroyActivityController extends BaseController {
     }
 
     @GetMapping("/queryAsset")
-    public MetaRestResult<Page<Asset>> queryAsset(@RequestParam Long id, Pageable pageable) {
+    public MetaRestResult<Page<Asset>> queryAsset(@RequestParam Long id, @RequestParam(defaultValue = "1") Long companyId, Pageable pageable) {
         MetaDestroyActivity metaDestroyActivity = metaDestroyActivityRepo.findById(id).orElse(null);
         if (Objects.isNull(metaDestroyActivity)) {
             return MetaRestResult.returnError("查询不到配置");
@@ -93,7 +93,8 @@ public class MetaDestroyActivityController extends BaseController {
         if (!metaDestroyActivity.isPublish()) {
             return MetaRestResult.returnError("该配置还未发布");
         }
-        return MetaRestResult.returnSuccess(assetService.findMintActivityAssetsCommon(SecurityUtils.getAuthenticatedUser().getId(), new CommonMatchDTO(metaDestroyActivity.getRule(), metaDestroyActivity.isAudit(), metaDestroyActivity.getCollectionName()), pageable));
+        return MetaRestResult.returnSuccess(assetService.findMintActivityAssetsCommon(SecurityUtils.getAuthenticatedUser().getId(), companyId,
+                new CommonMatchDTO(metaDestroyActivity.getRule(), metaDestroyActivity.isAudit(), metaDestroyActivity.getCollectionName()), pageable));
     }
 
 }

+ 2 - 2
src/main/java/com/izouma/nineth/web/MintActivityController.java

@@ -24,7 +24,7 @@ public class MintActivityController extends BaseController {
     private MintActivityService mintActivityService;
     private MintActivityRepo    mintActivityRepo;
 
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @PostMapping("/save")
     public MintActivity save(@RequestBody MintActivity record) {
         if (record.getRule() != null) mintActivityService.checkRule(record.getRule());
@@ -74,7 +74,7 @@ public class MintActivityController extends BaseController {
         return mintActivityRepo.findById(id).orElseThrow(new BusinessException("无记录"));
     }
 
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @PostMapping("/del/{id}")
     public void del(@PathVariable Long id) {
         mintActivityRepo.softDelete(id);

+ 6 - 6
src/main/java/com/izouma/nineth/web/MintOrderController.java

@@ -34,7 +34,7 @@ public class MintOrderController extends BaseController {
     private MintActivityRepo mintActivityRepo;
     private MintMaterialRepo mintMaterialRepo;
 
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @PostMapping("/save")
     public MintOrder save(@RequestBody MintOrder record) {
         if (record.getId() != null) {
@@ -76,7 +76,7 @@ public class MintOrderController extends BaseController {
         return mintOrder;
     }
 
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @PostMapping("/del/{id}")
     public void del(@PathVariable Long id) {
         mintOrderRepo.softDelete(id);
@@ -96,7 +96,7 @@ public class MintOrderController extends BaseController {
         return mintOrderService.create(SecurityUtils.getAuthenticatedUser(), assetIds, mintActivityId, addressId);
     }
 
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @ApiOperation("导出")
     @PostMapping("/excelPhone")
     public void excelPhone(HttpServletResponse response, @RequestBody PageQuery pageQuery) throws IOException {
@@ -104,7 +104,7 @@ public class MintOrderController extends BaseController {
         ExcelUtils.export(response, data);
     }
 
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @ApiOperation("订单完成")
     @GetMapping("/finish/{id}")
     public void finish(@PathVariable Long id) {
@@ -125,13 +125,13 @@ public class MintOrderController extends BaseController {
         }};
     }
 
-    @PreAuthorize("hasAnyRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @PostMapping("/pass")
     public void audit(@RequestParam Long id) {
         mintOrderService.orderAudit(id, true);
     }
 
-    @PreAuthorize("hasAnyRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @PostMapping("/deny")
     public void deny(@RequestParam Long id) {
         mintOrderService.orderAudit(id, false);

+ 38 - 0
src/main/java/com/izouma/nineth/web/OrderPayControllerV2.java

@@ -254,4 +254,42 @@ public class OrderPayControllerV2 {
     public Map<String, Object> payAuctionAgreement(@RequestParam Long id, String bindCardId) {
         return orderPayService.payAuctionOrderAgreement(id, bindCardId);
     }
+
+    @RequestMapping(value = "/pic/ali")
+    @ResponseBody
+    public String payPicOrderAli(Long id) {
+        return orderPayService.payPicAli(id);
+    }
+
+    @RequestMapping(value = "/pic/alipay_wx", method = RequestMethod.GET)
+    public String payPicOrderAlipayWx(Long id, Model model) {
+        String payUrl = orderPayService.payPicOrder(id);
+        model.addAttribute("payUrl", payUrl);
+        model.addAttribute("orderId", id);
+        return "AlipayHtml";
+    }
+
+    @RequestMapping(value = "/pic/sandQuick", method = RequestMethod.GET, produces = "text/html")
+    @ResponseBody
+    public String payPicQuick(@RequestParam Long id) {
+        return orderPayService.payPicQuick(id);
+    }
+
+    @RequestMapping("/pic/sandQuickBind")
+    @ResponseBody
+    public String payPicQuickBind(@RequestParam Long id) {
+        return orderPayService.payPicQuickBind(id);
+    }
+
+    @RequestMapping(value = "/pic/balance")
+    @ResponseBody
+    public void payPicOrderBalance(@RequestParam Long id, @RequestParam String tradeCode) {
+        orderPayService.payPicOrderBalance(id, SecurityUtils.getAuthenticatedUser().getId(), tradeCode);
+    }
+
+    @RequestMapping(value = "/pic/agreement")
+    @ResponseBody
+    public Map<String, Object> payPicAgreement(@RequestParam Long id, String bindCardId) {
+        return orderPayService.payPicOrderAgreement(id, bindCardId);
+    }
 }

+ 4 - 0
src/main/java/com/izouma/nineth/web/PayEaseController.java

@@ -62,6 +62,10 @@ public class PayEaseController {
                     rocketMQTemplate.syncSend(generalProperties.getOrderNotifyTopic(),
                             new OrderNotifyEvent(id, PayMethod.SANDPAY, serialNumber,
                                     System.currentTimeMillis(), OrderNotifyEvent.TYPE_AUCTION_ORDER));
+                case "picOrder":
+                    rocketMQTemplate.syncSend(generalProperties.getOrderNotifyTopic(),
+                            new OrderNotifyEvent(id, PayMethod.SANDPAY, serialNumber,
+                                    System.currentTimeMillis(), OrderNotifyEvent.TYPE_PIC));
                     break;
             }
         }

+ 4 - 0
src/main/java/com/izouma/nineth/web/SandPayController.java

@@ -79,6 +79,10 @@ public class SandPayController {
                                 rocketMQTemplate.syncSend(generalProperties.getOrderNotifyTopic(),
                                         new OrderNotifyEvent(id, PayMethod.SANDPAY, payOrderCode,
                                                 System.currentTimeMillis(), OrderNotifyEvent.TYPE_AUCTION_ORDER));
+                            case "picOrder":
+                                rocketMQTemplate.syncSend(generalProperties.getOrderNotifyTopic(),
+                                        new OrderNotifyEvent(id, PayMethod.SANDPAY, payOrderCode,
+                                                System.currentTimeMillis(), OrderNotifyEvent.TYPE_PIC));
                                 break;
                         }
                     }

+ 8 - 8
src/main/java/com/izouma/nineth/web/TagController.java

@@ -23,7 +23,7 @@ public class TagController extends BaseController {
     private TagService tagService;
     private TagRepo    tagRepo;
 
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @PostMapping("/save")
     public Tag save(@RequestBody Tag record) {
         if (record.getId() == null) {
@@ -34,10 +34,10 @@ public class TagController extends BaseController {
         return tagRepo.save(orig);
     }
 
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     @PostMapping("/create")
-    public Tag create(@RequestParam String name, String remark, boolean addForExist, String addMode, String pattern) {
-        return tagService.create(name, remark, addForExist, addMode, pattern);
+    public Tag create(@RequestParam String name, String remark, boolean addForExist, String addMode, String pattern, @RequestParam(defaultValue = "1") Long companyId) {
+        return tagService.create(name, remark, addForExist, addMode, pattern, companyId);
     }
 
 
@@ -53,7 +53,7 @@ public class TagController extends BaseController {
     }
 
     @PostMapping("/del/{id}")
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
     public void del(@PathVariable Long id) {
         tagRepo.deleteById(id);
     }
@@ -66,9 +66,9 @@ public class TagController extends BaseController {
     }
 
     @GetMapping("/checkAdd")
-    @PreAuthorize("hasRole('ADMIN')")
-    public Object checkAdd(String addMode, String pattern) {
-        return tagService.checkAdd(addMode, pattern);
+    @PreAuthorize("hasAnyRole('ADMIN','SAAS')")
+    public Object checkAdd(String addMode, String pattern, Long companyId) {
+        return tagService.checkAdd(addMode, pattern, companyId);
     }
 }
 

+ 1 - 0
src/main/resources/application.yaml

@@ -12,6 +12,7 @@ server:
     accept-count: 10000
     threads:
       max: 3000
+    max-http-form-post-size: 100MB
 spring:
   profiles:
     active: dev

+ 75 - 0
src/main/vue/src/views/Admin.vue

@@ -207,6 +207,16 @@ export default {
                                 root: false,
                                 active: true
                             },
+                            {
+                                id: '3410329',
+                                name: '标签管理',
+                                path: '/tagList',
+                                icon: '',
+                                sort: 42,
+                                parent: '3410316',
+                                root: false,
+                                active: true
+                            },
                             // {
                             //     id: '3410339',
                             //     name: '空投',
@@ -270,6 +280,71 @@ export default {
                             }
                         ]
                     },
+                    {
+                        id: '2396143',
+                        del: false,
+                        name: '铸造管理',
+                        path: '',
+                        icon: 'fas fa-gavel',
+                        sort: 32,
+                        parent: null,
+                        root: true,
+                        enabled: null,
+                        active: true,
+                        category: null,
+                        children: [
+                            {
+                                id: '2396144',
+                                del: false,
+                                name: '铸造活动',
+                                path: '/mintActivityList',
+                                icon: '',
+                                sort: 28,
+                                parent: '2396143',
+                                root: false,
+                                enabled: null,
+                                active: true,
+                                category: null,
+                                children: null,
+                                authorities: null,
+                                createdAt: null
+                            },
+                            {
+                                id: '2396145',
+                                del: false,
+                                name: '铸造订单',
+                                path: '/mintOrderList',
+                                icon: '',
+                                sort: 29,
+                                parent: '2396143',
+                                root: false,
+                                enabled: null,
+                                active: true,
+                                category: null,
+                                children: null,
+                                authorities: null,
+                                createdAt: null
+                            },
+                            {
+                                id: '6552353',
+                                del: false,
+                                name: '铸造订单审核',
+                                path: '/mintOrderAuditList',
+                                icon: '',
+                                sort: 56,
+                                parent: '2396143',
+                                root: false,
+                                enabled: null,
+                                active: true,
+                                category: null,
+                                children: null,
+                                authorities: null,
+                                createdAt: null
+                            }
+                        ],
+                        authorities: null,
+                        createdAt: null
+                    },
                     {
                         id: '3252226',
                         name: '内容管理',

+ 2 - 2
src/main/vue/src/views/CollectionEdit.vue

@@ -465,7 +465,6 @@ export default {
                 onShelf: false,
                 salable: false,
                 properties: [],
-                newsOptions: [],
                 type: 'DEFAULT',
                 source: 'OFFICIAL',
                 pic: [],
@@ -720,7 +719,8 @@ export default {
             customUrl: resolveUrl(this.$baseUrl, 'upload/3dModel'),
             scale: 1,
             yOffset: 0,
-            editQuota: true
+            editQuota: true,
+            newsOptions: []
         };
     },
     methods: {

+ 1 - 1
src/main/vue/src/views/PhotoAssetList.vue

@@ -90,7 +90,7 @@
                         type="success"
                         size="mini"
                         plain
-                        v-if="row.status === 'PENDING'"
+                        v-if="row.status === 'PENDING' && row.orderStatus === 'FINISH'"
                         :loading="row.saving"
                     >
                         通过

+ 7 - 2
src/test/java/com/izouma/nineth/AES.java

@@ -4,10 +4,13 @@ import com.izouma.nineth.domain.IdentityAuth;
 import com.izouma.nineth.dto.UserBankCard;
 import com.izouma.nineth.repo.IdentityAuthRepo;
 import com.izouma.nineth.repo.UserBankCardRepo;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -15,7 +18,9 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ForkJoinPool;
 import java.util.stream.Collectors;
 
-public class AES extends ApplicationTests {
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class AES {
 
     @Autowired
     private UserBankCardRepo userBankCardRepo;

+ 7 - 2
src/test/java/com/izouma/nineth/AntChainTest.java

@@ -7,10 +7,15 @@ import com.antfinancial.mychain.baas.tool.restclient.model.Method;
 import com.antfinancial.mychain.baas.tool.restclient.model.ReceiptDecoration;
 import com.antfinancial.mychain.baas.tool.restclient.response.BaseResp;
 import com.izouma.nineth.utils.HashUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
 
-public class AntChainTest extends ApplicationTests {
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class AntChainTest {
     @Autowired
     private RestClient restClient;
 

+ 1 - 1
src/test/java/com/izouma/nineth/ApplicationTests.java

@@ -1,6 +1,6 @@
 package com.izouma.nineth;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;

+ 6 - 2
src/test/java/com/izouma/nineth/Bucket4jTest.java

@@ -2,12 +2,16 @@ package com.izouma.nineth;
 
 import io.github.bucket4j.*;
 import io.github.bucket4j.distributed.proxy.ProxyManager;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.time.Duration;
 
-public class Bucket4jTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class Bucket4jTest {
     @Autowired
     private ProxyManager<String> buckets;
 

+ 7 - 2
src/test/java/com/izouma/nineth/CDNTest.java

@@ -6,11 +6,16 @@ import com.aliyun.cdn20180510.Client;
 import com.aliyun.cdn20180510.models.RefreshObjectCachesRequest;
 import com.aliyun.cdn20180510.models.RefreshObjectCachesResponse;
 import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 @Slf4j
-public class CDNTest extends ApplicationTests {
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class CDNTest {
     @Autowired
     private Client cdnClient;
 

+ 0 - 5
src/test/java/com/izouma/nineth/CommonTest.java

@@ -691,11 +691,6 @@ public class CommonTest {
 
     @Test
     public void testSet() {
-        Set<Tag> set = new HashSet<>();
-        set.add(new Tag(1L, "tag1", "tag1"));
-        set.add(new Tag(1L, "tag1", "tag1"));
-        set.add(new Tag(1L, "tag1", "tag1"));
-        System.out.println(set);
     }
 
     @Test

+ 1 - 1
src/test/java/com/izouma/nineth/ContentAuditTest.java

@@ -12,7 +12,7 @@ import com.aliyuncs.http.FormatType;
 import com.aliyuncs.http.HttpResponse;
 import com.aliyuncs.profile.DefaultProfile;
 import com.aliyuncs.profile.IClientProfile;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;

+ 6 - 2
src/test/java/com/izouma/nineth/DebounceTest.java

@@ -1,10 +1,14 @@
 package com.izouma.nineth;
 
 import com.izouma.nineth.service.DebounceTestService;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class DebounceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class DebounceTest {
     @Autowired
     private DebounceTestService debounceTestService;
 

+ 1 - 1
src/test/java/com/izouma/nineth/GenCodeTest.java

@@ -7,7 +7,7 @@ import com.izouma.nineth.utils.FileUtils;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;

+ 1 - 1
src/test/java/com/izouma/nineth/PayEaseTest.java

@@ -21,7 +21,7 @@ import com.upay.sdk.transferDomestic.executer.TransferDomesticAccountExecuter;
 import com.upay.sdk.transferDomestic.executer.TransferDomesticOrderExecuter;
 import com.upay.sdk.transferDomestic.executer.TransferDomesticSingleOrderExecuter;
 import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;

+ 6 - 2
src/test/java/com/izouma/nineth/PayOrderTest.java

@@ -4,10 +4,14 @@ package com.izouma.nineth;
 import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.dto.PayQuery;
 import com.izouma.nineth.service.OrderPayService;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class PayOrderTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class PayOrderTest {
     @Autowired
     private OrderPayService orderPayService;
 

+ 6 - 2
src/test/java/com/izouma/nineth/RedisTest.java

@@ -1,12 +1,16 @@
 package com.izouma.nineth;
 
 import com.izouma.nineth.config.RedisKeys;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.BoundHashOperations;
 import org.springframework.data.redis.core.RedisTemplate;
 
-public class RedisTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class RedisTest {
     @Autowired
     private RedisTemplate<String, Object> redisTemplate;
 

+ 6 - 2
src/test/java/com/izouma/nineth/TestClassTest.java

@@ -3,10 +3,14 @@ package com.izouma.nineth;
 
 import com.izouma.nineth.domain.TestClass;
 import com.izouma.nineth.repo.TestClassRepo;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class TestClassTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class TestClassTest {
     @Autowired
     private TestClassRepo testClassRepo;
 

+ 6 - 2
src/test/java/com/izouma/nineth/TestRedissonLock.java

@@ -1,13 +1,17 @@
 package com.izouma.nineth;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.concurrent.TimeUnit;
 
-public class TestRedissonLock extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class TestRedissonLock {
 
     @Autowired
     private RedissonClient redissonClient;

+ 6 - 2
src/test/java/com/izouma/nineth/WxTest.java

@@ -4,10 +4,14 @@ import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.WxPayService;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class WxTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class WxTest {
     @Autowired
     private WxPayService wxPayService;
 

+ 6 - 2
src/test/java/com/izouma/nineth/repo/AuctionRecordRepoTest.java

@@ -3,10 +3,14 @@ package com.izouma.nineth.repo;
 
 import com.izouma.nineth.ApplicationTests;
 import com.izouma.nineth.enums.AuctionType;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class AuctionRecordRepoTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AuctionRecordRepoTest {
     @Autowired
     private AuctionRecordRepo auctionRecordRepo;
 

+ 18 - 2
src/test/java/com/izouma/nineth/repo/CollectionRepoTest.java

@@ -5,17 +5,23 @@ import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.enums.OrderStatus;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.service.AssetService;
+import com.izouma.nineth.service.CacheService;
 import org.apache.commons.lang3.StringUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import javax.persistence.criteria.*;
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
-public class CollectionRepoTest extends ApplicationTests {
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class CollectionRepoTest {
     @Autowired
     private CollectionRepo   collectionRepo;
     @Autowired
@@ -26,6 +32,16 @@ public class CollectionRepoTest extends ApplicationTests {
     private UserPropertyRepo userPropertyRepo;
     @Autowired
     private OrderRepo        orderRepo;
+    @Autowired
+    private CacheService     cacheService;
+
+    @Test
+    public void findById() {
+        cacheService.clearCollection(8115657L);
+        int i1 = collectionRepo.findById(8115657L).get().getTags().size();
+        int i2 = collectionRepo.findById(8115657L).get().getTags().size();
+        assert (i1 == i2);
+    }
 
     @Test
     public void updateCDN() {

+ 6 - 2
src/test/java/com/izouma/nineth/repo/OrderRepoTest.java

@@ -2,7 +2,7 @@ package com.izouma.nineth.repo;
 
 import com.alibaba.fastjson.JSONObject;
 import com.izouma.nineth.ApplicationTests;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.time.LocalDate;
@@ -12,7 +12,11 @@ import java.util.List;
 import java.util.Map;
 
 
-public class OrderRepoTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class OrderRepoTest {
 
     @Autowired
     private OrderRepo        orderRepo;

+ 1 - 1
src/test/java/com/izouma/nineth/repo/SmsRecordRepoTest.java

@@ -1,7 +1,7 @@
 package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.SmsRecord;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;

+ 6 - 2
src/test/java/com/izouma/nineth/repo/UserPropertyRepoTest.java

@@ -13,7 +13,7 @@ import com.izouma.nineth.enums.OrderStatus;
 import com.izouma.nineth.service.CacheService;
 import com.izouma.nineth.utils.excel.UploadDataListener;
 import org.apache.commons.lang3.ObjectUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.io.File;
@@ -23,7 +23,11 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 
-public class UserPropertyRepoTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class UserPropertyRepoTest {
 
     @Autowired
     private UserPropertyRepo userPropertyRepo;

+ 1 - 1
src/test/java/com/izouma/nineth/repo/UserRepoTest.java

@@ -7,7 +7,7 @@ import com.izouma.nineth.domain.User;
 import com.izouma.nineth.enums.AuthorityName;
 import com.izouma.nineth.security.Authority;
 import org.apache.commons.lang3.RandomStringUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;

+ 6 - 2
src/test/java/com/izouma/nineth/service/AdapayMerchantServiceTest.java

@@ -1,12 +1,16 @@
 package com.izouma.nineth.service;
 
 import com.izouma.nineth.ApplicationTests;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import static org.junit.Assert.*;
 
-public class AdapayMerchantServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AdapayMerchantServiceTest {
     @Autowired
     private AdapayMerchantService adapayMerchantService;
 

+ 6 - 2
src/test/java/com/izouma/nineth/service/AdapayServiceTest.java

@@ -10,7 +10,7 @@ import com.izouma.nineth.domain.AdaTrade;
 import com.izouma.nineth.repo.GiftOrderRepo;
 import com.izouma.nineth.repo.OrderRepo;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.HashMap;
@@ -20,7 +20,11 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ForkJoinPool;
 import java.util.stream.Collectors;
 
-public class AdapayServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AdapayServiceTest {
     @Autowired
     private OrderRepo         orderRepo;
     @Autowired

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

@@ -15,7 +15,7 @@ import com.izouma.nineth.utils.excel.LocalDateTimeConverter;
 import lombok.Data;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;

+ 6 - 2
src/test/java/com/izouma/nineth/service/AirDropServiceTest.java

@@ -14,7 +14,7 @@ import com.izouma.nineth.repo.AirDropRepo;
 import com.izouma.nineth.repo.AssetRepo;
 import com.izouma.nineth.repo.TokenHistoryRepo;
 import com.izouma.nineth.utils.excel.UploadDataListener;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.io.File;
@@ -23,7 +23,11 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-public class AirDropServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AirDropServiceTest {
     @Autowired
     AirDropService    airDropService;
     @Autowired

+ 6 - 2
src/test/java/com/izouma/nineth/service/AssetMintServiceTest.java

@@ -1,12 +1,16 @@
 package com.izouma.nineth.service;
 
 import com.izouma.nineth.ApplicationTests;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import static org.junit.Assert.*;
 
-public class AssetMintServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AssetMintServiceTest {
     @Autowired
     private AssetMintService assetMintService;
 

+ 6 - 2
src/test/java/com/izouma/nineth/service/AuctionActivityServiceTest.java

@@ -5,14 +5,18 @@ import com.izouma.nineth.domain.AuctionActivity;
 import com.izouma.nineth.dto.auction.AuctionInputDTO;
 import com.izouma.nineth.enums.AuctionStatus;
 import com.izouma.nineth.repo.AuctionActivityRepo;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 
-public class AuctionActivityServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AuctionActivityServiceTest {
 
     @Autowired
     private AuctionActivityService auctionActivityService;

+ 6 - 2
src/test/java/com/izouma/nineth/service/AuctionOrderServiceTest.java

@@ -2,10 +2,14 @@ package com.izouma.nineth.service;
 
 
 import com.izouma.nineth.ApplicationTests;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class AuctionOrderServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AuctionOrderServiceTest {
     @Autowired
     private AuctionOrderService auctionOrderService;
 

+ 6 - 2
src/test/java/com/izouma/nineth/service/AuctionRecordServiceTest.java

@@ -3,10 +3,14 @@ package com.izouma.nineth.service;
 
 import com.izouma.nineth.ApplicationTests;
 import com.izouma.nineth.dto.PageQuery;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class AuctionRecordServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AuctionRecordServiceTest {
     @Autowired
     private AuctionRecordService auctionRecordService;
 

+ 6 - 2
src/test/java/com/izouma/nineth/service/IdentityAuthServiceTest.java

@@ -6,12 +6,16 @@ import com.izouma.nineth.domain.User;
 import com.izouma.nineth.enums.AuthStatus;
 import com.izouma.nineth.repo.IdentityAuthRepo;
 import com.izouma.nineth.repo.UserRepo;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.List;
 
-public class IdentityAuthServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class IdentityAuthServiceTest {
     @Autowired
     private IdentityAuthService identityAuthService;
     @Autowired

+ 8 - 2
src/test/java/com/izouma/nineth/service/NFTServiceTest.java

@@ -19,15 +19,21 @@ import com.izouma.nineth.utils.TokenUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Hex;
 import org.apache.commons.lang3.RandomStringUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
 
 import java.io.File;
 import java.math.BigInteger;
 import java.util.Scanner;
 
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
 @Slf4j
-public class NFTServiceTest extends ApplicationTests {
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class NFTServiceTest {
     @Autowired
     private NFTService           nftService;
     @Autowired

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

@@ -18,7 +18,7 @@ import com.izouma.nineth.utils.SnowflakeIdWorker;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.MapUtils;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.io.IOException;
@@ -30,8 +30,15 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ForkJoinPool;
 import java.util.stream.Collectors;
 
+
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
 @Slf4j
-public class OrderServiceTest extends ApplicationTests {
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class OrderServiceTest {
     @Autowired
     private OrderService       orderService;
     @Autowired

+ 6 - 2
src/test/java/com/izouma/nineth/service/ShowroomServiceTest.java

@@ -4,7 +4,7 @@ import com.izouma.nineth.ApplicationTests;
 import com.izouma.nineth.domain.ShowCollection;
 import com.izouma.nineth.domain.Showroom;
 import com.izouma.nineth.dto.PageQuery;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.ArrayList;
@@ -12,7 +12,11 @@ import java.util.List;
 import java.util.Map;
 
 
-public class ShowroomServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class ShowroomServiceTest {
 
     @Autowired
     private ShowroomService showroomService;

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

@@ -1,6 +1,6 @@
 package com.izouma.nineth.service;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;

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

@@ -19,7 +19,7 @@ import com.izouma.nineth.service.storage.StorageService;
 import com.izouma.nineth.utils.BankUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.io.IOException;
@@ -27,7 +27,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.regex.Pattern;
 
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
 @Slf4j
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 public class UserServiceTest extends ApplicationTests {
 
     @Autowired

+ 6 - 2
src/test/java/com/izouma/nineth/service/WithdrawApplyServiceTest.java

@@ -11,7 +11,7 @@ import com.izouma.nineth.repo.UserBankCardRepo;
 import com.izouma.nineth.repo.WithdrawApplyRepo;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
 import lombok.AllArgsConstructor;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.math.BigDecimal;
@@ -21,7 +21,11 @@ import java.util.stream.Collectors;
 
 import static org.junit.jupiter.api.Assertions.*;
 
-public class WithdrawApplyServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class WithdrawApplyServiceTest {
     @Autowired
     private WithdrawApplyRepo    withdrawApplyRepo;
     @Autowired

+ 6 - 2
src/test/java/com/izouma/nineth/service/sms/SmsServiceTest.java

@@ -1,10 +1,14 @@
 package com.izouma.nineth.service.sms;
 
 import com.izouma.nineth.ApplicationTests;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class SmsServiceTest extends ApplicationTests {
+import org.springframework.boot.test.context.SpringBootTest;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class SmsServiceTest {
     @Autowired
     private SmsService smsService;