Browse Source

Merge branch 'master' of http://git.izouma.com/xiongzhu/raex_back

panhui 3 years ago
parent
commit
ce7ebecfd8
100 changed files with 2120 additions and 365 deletions
  1. 2 0
      src/main/java/com/izouma/nineth/annotations/RedisLock.java
  2. 1 1
      src/main/java/com/izouma/nineth/aspect/RedisLockAspect.java
  3. 12 1
      src/main/java/com/izouma/nineth/config/CacheConfig.java
  4. 5 0
      src/main/java/com/izouma/nineth/config/Constants.java
  5. 32 0
      src/main/java/com/izouma/nineth/converter/MetaGameAwardListConverter.java
  6. 32 0
      src/main/java/com/izouma/nineth/converter/MetaZombieDTOListConverter.java
  7. 6 1
      src/main/java/com/izouma/nineth/domain/MetaAdvertRecord.java
  8. 3 0
      src/main/java/com/izouma/nineth/domain/MetaBonusScene.java
  9. 6 0
      src/main/java/com/izouma/nineth/domain/MetaDestroyActivity.java
  10. 0 55
      src/main/java/com/izouma/nineth/domain/MetaGame.java
  11. 23 0
      src/main/java/com/izouma/nineth/domain/MetaGameAward.java
  12. 89 0
      src/main/java/com/izouma/nineth/domain/MetaGameCopy.java
  13. 77 0
      src/main/java/com/izouma/nineth/domain/MetaGameProcess.java
  14. 35 0
      src/main/java/com/izouma/nineth/domain/MetaGameStageAward.java
  15. 3 0
      src/main/java/com/izouma/nineth/domain/MetaItem.java
  16. 21 0
      src/main/java/com/izouma/nineth/domain/MetaMMOLoginInfo.java
  17. 15 0
      src/main/java/com/izouma/nineth/domain/MetaShowRoomAsset.java
  18. 8 0
      src/main/java/com/izouma/nineth/domain/MetaSpatialInfo.java
  19. 7 0
      src/main/java/com/izouma/nineth/domain/MetaTaskActivity.java
  20. 3 0
      src/main/java/com/izouma/nineth/domain/MetaUser.java
  21. 4 1
      src/main/java/com/izouma/nineth/domain/MetaUserGold.java
  22. 5 0
      src/main/java/com/izouma/nineth/domain/MetaUserGoldRecord.java
  23. 43 0
      src/main/java/com/izouma/nineth/domain/MetaZombie.java
  24. 33 0
      src/main/java/com/izouma/nineth/domain/PhotoAsset.java
  25. 4 0
      src/main/java/com/izouma/nineth/domain/PublicScreenChat.java
  26. 2 0
      src/main/java/com/izouma/nineth/domain/Tag.java
  27. 1 1
      src/main/java/com/izouma/nineth/dto/BuildingDTO.java
  28. 38 0
      src/main/java/com/izouma/nineth/dto/MetaZombieDTO.java
  29. 2 3
      src/main/java/com/izouma/nineth/enums/GameCopyType.java
  30. 2 2
      src/main/java/com/izouma/nineth/enums/MetaGame.java
  31. 1 0
      src/main/java/com/izouma/nineth/enums/MetaItemEnum.java
  32. 19 0
      src/main/java/com/izouma/nineth/enums/MetaZombieType.java
  33. 2 1
      src/main/java/com/izouma/nineth/enums/PayMethod.java
  34. 1 0
      src/main/java/com/izouma/nineth/event/OrderNotifyEvent.java
  35. 6 0
      src/main/java/com/izouma/nineth/listener/OrderNotifyListener.java
  36. 1 1
      src/main/java/com/izouma/nineth/repo/AssetRepo.java
  37. 3 0
      src/main/java/com/izouma/nineth/repo/CollectionRepo.java
  38. 23 0
      src/main/java/com/izouma/nineth/repo/MetaGameCopyRepo.java
  39. 15 0
      src/main/java/com/izouma/nineth/repo/MetaGameProcessRepo.java
  40. 0 21
      src/main/java/com/izouma/nineth/repo/MetaGameRepo.java
  41. 22 0
      src/main/java/com/izouma/nineth/repo/MetaGameStageAwardRepo.java
  42. 3 1
      src/main/java/com/izouma/nineth/repo/MetaItemRepo.java
  43. 1 5
      src/main/java/com/izouma/nineth/repo/MetaShowRoomAssetRepo.java
  44. 1 1
      src/main/java/com/izouma/nineth/repo/MetaTaskToUserRepo.java
  45. 23 0
      src/main/java/com/izouma/nineth/repo/MetaZombieRepo.java
  46. 7 1
      src/main/java/com/izouma/nineth/repo/PhotoAssetRepo.java
  47. 11 3
      src/main/java/com/izouma/nineth/repo/SpaceObjectsInfoRepo.java
  48. 16 16
      src/main/java/com/izouma/nineth/repo/TagRepo.java
  49. 5 3
      src/main/java/com/izouma/nineth/repo/UserAssetSummaryRepo.java
  50. 1 1
      src/main/java/com/izouma/nineth/security/WebSecurityConfig.java
  51. 1 1
      src/main/java/com/izouma/nineth/service/AirDropService.java
  52. 15 8
      src/main/java/com/izouma/nineth/service/AssetService.java
  53. 3 1
      src/main/java/com/izouma/nineth/service/AuctionActivityService.java
  54. 2 2
      src/main/java/com/izouma/nineth/service/ContentAuditService.java
  55. 95 0
      src/main/java/com/izouma/nineth/service/MetaGameCopyService.java
  56. 20 0
      src/main/java/com/izouma/nineth/service/MetaGameProcessService.java
  57. 0 20
      src/main/java/com/izouma/nineth/service/MetaGameService.java
  58. 20 0
      src/main/java/com/izouma/nineth/service/MetaGameStageAwardService.java
  59. 8 9
      src/main/java/com/izouma/nineth/service/MetaPlayerInfoService.java
  60. 14 3
      src/main/java/com/izouma/nineth/service/MetaShowRoomAssetService.java
  61. 65 0
      src/main/java/com/izouma/nineth/service/MetaSpatialInfoService.java
  62. 20 0
      src/main/java/com/izouma/nineth/service/MetaTaskService.java
  63. 20 0
      src/main/java/com/izouma/nineth/service/MetaZombieService.java
  64. 2 2
      src/main/java/com/izouma/nineth/service/MintOrderService.java
  65. 18 0
      src/main/java/com/izouma/nineth/service/OrderCancelService.java
  66. 153 27
      src/main/java/com/izouma/nineth/service/OrderPayService.java
  67. 72 19
      src/main/java/com/izouma/nineth/service/PhotoAssetService.java
  68. 14 10
      src/main/java/com/izouma/nineth/service/TagService.java
  69. 1 1
      src/main/java/com/izouma/nineth/service/UserAssetSummaryService.java
  70. 41 0
      src/main/java/com/izouma/nineth/utils/excel/CoordinateDTOConverter.java
  71. 42 0
      src/main/java/com/izouma/nineth/utils/excel/EntryModelTypeConverter.java
  72. 11 0
      src/main/java/com/izouma/nineth/utils/excel/ExcelUtils.java
  73. 42 0
      src/main/java/com/izouma/nineth/utils/excel/GameCopyTypeConverter.java
  74. 42 0
      src/main/java/com/izouma/nineth/utils/excel/ListConverter.java
  75. 41 0
      src/main/java/com/izouma/nineth/utils/excel/MetaGameAwardConverter.java
  76. 42 0
      src/main/java/com/izouma/nineth/utils/excel/MetaGameConverter.java
  77. 42 0
      src/main/java/com/izouma/nineth/utils/excel/MetaItemEnumConverter.java
  78. 42 0
      src/main/java/com/izouma/nineth/utils/excel/MetaRegionEnumConverter.java
  79. 41 0
      src/main/java/com/izouma/nineth/utils/excel/MetaZombieDTOConverter.java
  80. 42 0
      src/main/java/com/izouma/nineth/utils/excel/MetaZombieTypeConverter.java
  81. 41 0
      src/main/java/com/izouma/nineth/utils/excel/MintActivityRuleConverter.java
  82. 5 0
      src/main/java/com/izouma/nineth/web/AlipayNotifyController.java
  83. 3 3
      src/main/java/com/izouma/nineth/web/AssetController.java
  84. 3 3
      src/main/java/com/izouma/nineth/web/CollectionController.java
  85. 4 0
      src/main/java/com/izouma/nineth/web/HmPayController.java
  86. 4 3
      src/main/java/com/izouma/nineth/web/MetaDestroyActivityController.java
  87. 0 67
      src/main/java/com/izouma/nineth/web/MetaGameController.java
  88. 146 0
      src/main/java/com/izouma/nineth/web/MetaGameCopyController.java
  89. 36 0
      src/main/java/com/izouma/nineth/web/MetaGameProcessController.java
  90. 72 0
      src/main/java/com/izouma/nineth/web/MetaGameStageAwardController.java
  91. 3 3
      src/main/java/com/izouma/nineth/web/MetaShowRoomAssetController.java
  92. 2 32
      src/main/java/com/izouma/nineth/web/MetaSpatialInfoController.java
  93. 1 10
      src/main/java/com/izouma/nineth/web/MetaTaskController.java
  94. 4 14
      src/main/java/com/izouma/nineth/web/MetaUserController.java
  95. 96 0
      src/main/java/com/izouma/nineth/web/MetaZombieController.java
  96. 2 2
      src/main/java/com/izouma/nineth/web/MintActivityController.java
  97. 6 6
      src/main/java/com/izouma/nineth/web/MintOrderController.java
  98. 38 0
      src/main/java/com/izouma/nineth/web/OrderPayControllerV2.java
  99. 4 0
      src/main/java/com/izouma/nineth/web/PayEaseController.java
  100. 4 0
      src/main/java/com/izouma/nineth/web/SandPayController.java

+ 2 - 0
src/main/java/com/izouma/nineth/annotations/RedisLock.java

@@ -15,6 +15,8 @@ public @interface RedisLock {
 
     Behavior behavior() default Behavior.THROW;
 
+    String message() default "获取锁失败";
+
     enum Behavior {
         WAIT,
         THROW

+ 1 - 1
src/main/java/com/izouma/nineth/aspect/RedisLockAspect.java

@@ -66,7 +66,7 @@ public class RedisLockAspect {
         } else {
             if (!lock.tryLock()) {
                 log.info("get redisLock fail");
-                throw new BusinessException("获取锁失败");
+                throw new BusinessException(redisLock.message());
             }
             log.info("get redisLock success");
         }

+ 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())));

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

@@ -29,6 +29,10 @@ public interface Constants {
 
     String USER_HOLD_CACHE_KEY = "userHoldList";
 
+    String WHETHER_TEST = "whether_test";
+
+    String INTERNAL_TEST = "internal_test";
+
     interface PayChannel {
         String SAND = "sandPay";
         String HM   = "hmPay";
@@ -50,6 +54,7 @@ public interface Constants {
         String MINT     = "mintOrder";
         String RECHARGE = "recharge";
         String AUCTION  = "auctionOrder";
+        String PIC  = "picOrder";
     }
 
     interface Rarity {

+ 32 - 0
src/main/java/com/izouma/nineth/converter/MetaGameAwardListConverter.java

@@ -0,0 +1,32 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.izouma.nineth.domain.MetaGameAward;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import java.util.List;
+
+public class MetaGameAwardListConverter implements AttributeConverter<List<MetaGameAward>, String> {
+
+    @Override
+    public String convertToDatabaseColumn(List<MetaGameAward> metaGameAwards) {
+        if (metaGameAwards == null) {
+            return null;
+        }
+        return JSON.toJSONString(metaGameAwards);
+    }
+
+    @Override
+    public List<MetaGameAward> convertToEntityAttribute(String s) {
+        if (StringUtils.isEmpty(s)) {
+            return null;
+        }
+        try {
+            return JSONArray.parseArray(s, MetaGameAward.class);
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+}

+ 32 - 0
src/main/java/com/izouma/nineth/converter/MetaZombieDTOListConverter.java

@@ -0,0 +1,32 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.izouma.nineth.dto.MetaZombieDTO;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import java.util.List;
+
+public class MetaZombieDTOListConverter implements AttributeConverter<List<MetaZombieDTO>, String> {
+
+    @Override
+    public String convertToDatabaseColumn(List<MetaZombieDTO> metaZombies) {
+        if (metaZombies == null) {
+            return null;
+        }
+        return JSON.toJSONString(metaZombies);
+    }
+
+    @Override
+    public List<MetaZombieDTO> convertToEntityAttribute(String s) {
+        if (StringUtils.isEmpty(s)) {
+            return null;
+        }
+        try {
+            return JSONArray.parseArray(s, MetaZombieDTO.class);
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+}

+ 6 - 1
src/main/java/com/izouma/nineth/domain/MetaAdvertRecord.java

@@ -1,6 +1,7 @@
 package com.izouma.nineth.domain;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -17,15 +18,19 @@ import javax.persistence.Entity;
 public class MetaAdvertRecord extends BaseEntity {
 
     @ApiModelProperty("广告图片")
+    @ExcelProperty("广告图片")
     private String pic;
 
     @ApiModelProperty("链接地址")
+    @ExcelProperty("链接地址")
     private String link;
 
-    @ApiModelProperty("用途 预留")
+    @ApiModelProperty("用途")
+    @ExcelProperty("用途")
     private int application;
 
     @ApiModelProperty("是否发布")
+    @ExcelProperty("是否发布")
     private boolean publish;
 
 }

+ 3 - 0
src/main/java/com/izouma/nineth/domain/MetaBonusScene.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -16,8 +17,10 @@ import javax.persistence.Entity;
 public class MetaBonusScene extends BaseEntity {
 
     @ApiModelProperty("玩家id")
+    @ExcelProperty("玩家id")
     private Long userId;
 
     @ApiModelProperty("按钮 1-15")
+    @ExcelProperty("触发按钮")
     private int button;
 }

+ 6 - 0
src/main/java/com/izouma/nineth/domain/MetaDestroyActivity.java

@@ -23,16 +23,20 @@ public class MetaDestroyActivity extends BaseEntity{
     @ApiModelProperty("活动规则")
     @Convert(converter = MintRuleConverter.class)
     @Column(columnDefinition = "TEXT")
+    @ExcelProperty("活动规则")
     private MintActivityRule rule;
 
     @ApiModelProperty("藏品数量")
+    @ExcelProperty("藏品数量")
     private int num;
 
     @Column(columnDefinition = "tinyint unsigned default 0")
     @ApiModelProperty("是否审核")
+    @ExcelProperty("是否审核")
     private boolean audit = false;
 
     @ApiModelProperty("藏品名称")
+    @ExcelProperty("藏品名称")
     private String collectionName;
 
     @ApiModelProperty("详情")
@@ -45,8 +49,10 @@ public class MetaDestroyActivity extends BaseEntity{
     private String awardPic;
 
     @ApiModelProperty("用途")
+    @ExcelProperty("用途")
     private int application;
 
     @ApiModelProperty("是否发布")
+    @ExcelProperty("是否发布")
     private boolean publish;
 }

+ 0 - 55
src/main/java/com/izouma/nineth/domain/MetaGame.java

@@ -1,55 +0,0 @@
-package com.izouma.nineth.domain;
-
-import com.izouma.nineth.converter.MintRuleConverter;
-import com.izouma.nineth.dto.MintActivityRule;
-import com.izouma.nineth.enums.EntryModeType;
-import com.izouma.nineth.enums.GameModeType;
-import com.izouma.nineth.enums.MetaGameType;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.*;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Entity
-@ApiModel("元宇宙游戏")
-public class MetaGame extends BaseEntity{
-
-    @ApiModelProperty("游戏")
-    @Enumerated(EnumType.STRING)
-    private MetaGameType name;
-
-    @ApiModelProperty("游戏模式")
-    @Enumerated(EnumType.STRING)
-    private GameModeType gameModeType;
-
-    @ApiModelProperty("入场方式")
-    @Enumerated(EnumType.STRING)
-    private EntryModeType entryModeType;
-
-    @ApiModelProperty("所需金币数量")
-    private int goldNum;
-
-    @ApiModelProperty("藏品规则")
-    @Convert(converter = MintRuleConverter.class)
-    @Column(columnDefinition = "TEXT")
-    private MintActivityRule rule;
-
-    @Column(columnDefinition = "tinyint unsigned default 0")
-    @ApiModelProperty("是否审核")
-    private boolean audit = false;
-
-    @ApiModelProperty("藏品名称")
-    private String collectionName;
-
-    @ApiModelProperty("所需nft数量")
-    private int num;
-
-    @ApiModelProperty("是否发布")
-    private boolean publish;
-}

+ 23 - 0
src/main/java/com/izouma/nineth/domain/MetaGameAward.java

@@ -0,0 +1,23 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.enums.EntryModeType;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MetaGameAward {
+
+    @ApiModelProperty("奖励类型")
+    private EntryModeType awardType;
+
+    @ApiModelProperty("奖励配置(金币奖励为金币数量,NFT奖励为NFT奖励图片地址)")
+    private String config;
+
+    @ApiModelProperty("概率")
+    private int probability;
+
+}

+ 89 - 0
src/main/java/com/izouma/nineth/domain/MetaGameCopy.java

@@ -0,0 +1,89 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.converter.LongArrayConverter;
+import com.izouma.nineth.converter.MetaGameAwardListConverter;
+import com.izouma.nineth.converter.MintRuleConverter;
+import com.izouma.nineth.dto.MintActivityRule;
+import com.izouma.nineth.enums.EntryModeType;
+import com.izouma.nineth.enums.GameCopyType;
+import com.izouma.nineth.enums.MetaGame;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙游戏副本配置")
+public class MetaGameCopy extends BaseEntity {
+
+    @ApiModelProperty("游戏名称")
+    @Enumerated(EnumType.STRING)
+    @ExcelProperty("游戏名称")
+    private MetaGame gameName;
+
+    @ApiModelProperty("游戏副本类型")
+    @Enumerated(EnumType.STRING)
+    @ExcelProperty("副本")
+    private GameCopyType gameCopyType;
+
+    @ApiModelProperty("入场方式")
+    @Enumerated(EnumType.STRING)
+    @ExcelProperty("入场方式")
+    private EntryModeType entryModeType;
+
+    @ApiModelProperty("规则说明")
+    @Column(columnDefinition = "TEXT")
+    @ExcelProperty("规则说明")
+    private String detail;
+
+    @ApiModelProperty("所需金币数量")
+    @ExcelProperty("所需金币数量")
+    private int goldNum;
+
+    @ApiModelProperty("藏品规则")
+    @Convert(converter = MintRuleConverter.class)
+    @Column(columnDefinition = "TEXT")
+    @ExcelProperty("藏品规则")
+    private MintActivityRule rule;
+
+    @Column(columnDefinition = "tinyint unsigned default 0")
+    @ApiModelProperty("是否审核")
+    @ExcelProperty("是否审核")
+    private boolean audit = false;
+
+    @ApiModelProperty("藏品名称")
+    @ExcelProperty("藏品名称")
+    private String collectionName;
+
+    @ApiModelProperty("所需nft数量")
+    @ExcelProperty("所需nft数量")
+    private int num;
+
+    @Convert(converter = LongArrayConverter.class)
+    @Column(columnDefinition = "TEXT")
+    @ExcelProperty("僵尸配置集合")
+    private List<Long> metaZombieIds;
+
+    @Transient
+    @ExcelIgnore
+    private List<MetaZombie> metaZombies;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = MetaGameAwardListConverter.class)
+    @ApiModelProperty("奖励配置")
+    @ExcelProperty("奖励配置")
+    private List<MetaGameAward> metaGameAwards;
+
+    @ApiModelProperty("是否发布")
+    @ExcelProperty("是否发布")
+    private boolean publish;
+}

+ 77 - 0
src/main/java/com/izouma/nineth/domain/MetaGameProcess.java

@@ -0,0 +1,77 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.converter.CoordinateConverter;
+import com.izouma.nineth.converter.MetaZombieDTOListConverter;
+import com.izouma.nineth.dto.CoordinateDTO;
+import com.izouma.nineth.dto.MetaZombieDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Convert;
+import javax.persistence.Entity;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙游戏进度")
+public class MetaGameProcess extends BaseEntity {
+
+    @ApiModelProperty("是否断线")
+    @ExcelProperty("是否断线")
+    private boolean disconnected;
+
+    @ApiModelProperty("是否完成")
+    @ExcelProperty("是否完成")
+    private boolean completed;
+
+    @ApiModelProperty("玩家id")
+    @ExcelProperty("玩家id")
+    private Long userId;
+
+    @ApiModelProperty("游戏副本id")
+    @ExcelProperty("游戏副本id")
+    private Long metaGameCopyId;
+
+    @ApiModelProperty("积分")
+    @ExcelProperty("当前积分")
+    private int point;
+
+    @ApiModelProperty("玩家剩余血量")
+    @ExcelProperty("玩家剩余血量")
+    private int remainingHP;
+
+    @ApiModelProperty("是否受到伤害")
+    @ExcelProperty("是否受到伤害")
+    private boolean hurt;
+
+    @ApiModelProperty("关卡")
+    @ExcelProperty("当前关卡")
+    private int model;
+
+    @ApiModelProperty("剩余子弹数")
+    @ExcelProperty("剩余子弹数")
+    private int bulletCount;
+
+    @ApiModelProperty("剩余时间 单位为秒")
+    @ExcelProperty("剩余时间(秒)")
+    private int timeLeft;
+
+    @ApiModelProperty("玩家坐标")
+    @ExcelProperty("玩家坐标")
+    @Convert(converter = CoordinateConverter.class)
+    private CoordinateDTO playerPos;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = MetaZombieDTOListConverter.class)
+    @ApiModelProperty("僵尸信息")
+    @ExcelProperty("僵尸信息")
+    private List<MetaZombieDTO> metaZombieDTOS;
+
+}

+ 35 - 0
src/main/java/com/izouma/nineth/domain/MetaGameStageAward.java

@@ -0,0 +1,35 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.enums.MetaGame;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙游戏里程碑奖励")
+public class MetaGameStageAward extends BaseEntity {
+
+    @ApiModelProperty("游戏名称")
+    @Enumerated(EnumType.STRING)
+    @ExcelProperty("游戏名称")
+    private MetaGame gameName;
+
+    @ApiModelProperty("积分")
+    @ExcelProperty("积分")
+    private int point;
+
+    @ApiModelProperty("奖励图片地址")
+    @ExcelProperty("奖励图片地址")
+    private String awardPic;
+
+}

+ 3 - 0
src/main/java/com/izouma/nineth/domain/MetaItem.java

@@ -1,6 +1,7 @@
 package com.izouma.nineth.domain;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.nineth.enums.MetaItemEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -20,9 +21,11 @@ import javax.persistence.Enumerated;
 public class MetaItem extends BaseEntity {
 
     @ApiModelProperty("物品名称")
+    @ExcelProperty("物品名称")
     private String name;
 
     @Enumerated(EnumType.STRING)
     @ApiModelProperty("物品类型")
+    @ExcelProperty("物品类型")
     private MetaItemEnum type;
 }

+ 21 - 0
src/main/java/com/izouma/nineth/domain/MetaMMOLoginInfo.java

@@ -1,6 +1,7 @@
 package com.izouma.nineth.domain;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.nineth.annotations.Searchable;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -24,55 +25,75 @@ import java.util.Objects;
 public class MetaMMOLoginInfo extends BaseEntity {
 
     @ApiModelProperty("昵称")
+    @ExcelProperty("昵称")
     @Searchable
     private String nickname;
 
     @ApiModelProperty("用户id")
+    @ExcelProperty("用户id")
     @Searchable
     private Long userId;
 
     @ApiModelProperty("区域id")
+    @ExcelProperty("区域id")
     @Searchable
     private Long regionId;
 
     @ApiModelProperty("城市id")
+    @ExcelProperty("城市id")
     @Searchable
     private Long cityId;
 
     @ApiModelProperty("上线时间")
+    @ExcelProperty("上线时间")
     private LocalDateTime onLineTime;
 
     @ApiModelProperty("离线时间")
+    @ExcelProperty("离线时间")
     private LocalDateTime offLineTime;
 
     @ApiModelProperty("sessionId")
+    @ExcelProperty("sessionId")
     private String sessionId;
 
     @ApiModelProperty("角色")
+    @ExcelProperty("角色")
     private String role;
 
+    @ExcelProperty("axisX")
     private Float axisX;
 
+    @ExcelProperty("axisY")
     private Float axisY;
 
+    @ExcelProperty("axisZ")
     private Float axisZ;
 
+    @ExcelProperty("eulerX")
     private Float eulerX;
 
+    @ExcelProperty("eulerY")
     private Float eulerY;
 
+    @ExcelProperty("eulerZ")
     private Float eulerZ;
 
+    @ExcelProperty("top")
     private int top;
 
+    @ExcelProperty("hat")
     private int hat;
 
+    @ExcelProperty("down")
     private int down;
 
+    @ExcelProperty("shoes")
     private int shoes;
 
+    @ExcelProperty("anim")
     private int anim;
 
+    @ExcelProperty("emoji")
     private int emoji;
 
     /**

+ 15 - 0
src/main/java/com/izouma/nineth/domain/MetaShowRoomAsset.java

@@ -1,5 +1,7 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.nineth.converter.CoordinateConverter;
 import com.izouma.nineth.dto.CoordinateDTO;
 import io.swagger.annotations.ApiModel;
@@ -19,20 +21,33 @@ import javax.persistence.Transient;
 @ApiModel("元宇宙展厅藏品")
 public class MetaShowRoomAsset extends BaseEntity {
 
+    @ApiModelProperty("空间id")
+    @ExcelProperty("空间id")
+    private Long spaceId;
+
     @ApiModelProperty("所属用户")
+    @ExcelProperty("所属用户")
     private Long userId;
 
     @ApiModelProperty("展厅id")
+    @ExcelProperty("展厅id")
     private Long showRoomId;
 
     @ApiModelProperty("资产id")
+    @ExcelProperty("资产id")
     private Long assetId;
 
     @ApiModelProperty("展厅内坐标")
     @Convert(converter = CoordinateConverter.class)
+    @ExcelProperty("展厅内坐标")
     private CoordinateDTO coordinate;
 
     @Transient
+    @ExcelIgnore
     private Asset asset;
 
+    @Transient
+    @ExcelIgnore
+    private String url;
+
 }

+ 8 - 0
src/main/java/com/izouma/nineth/domain/MetaSpatialInfo.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.converter.CoordinateConverter;
 import com.izouma.nineth.dto.CoordinateDTO;
@@ -24,27 +25,34 @@ public class MetaSpatialInfo extends BaseEntity {
 
     @ApiModelProperty("所属区域")
     @Enumerated(EnumType.STRING)
+    @ExcelProperty("所属区域")
     private MetaRegionEnum region;
 
     @ApiModelProperty("目前状态:true在售/false未售")
+    @ExcelProperty("是否可售")
     private boolean sale;
 
     @ApiModelProperty("所属用户id")
+    @ExcelProperty("所属用户id")
     @Searchable
     private Long userId;
 
     @ApiModelProperty("空间大小")
+    @ExcelProperty("空间大小")
     private int size;
 
     @ApiModelProperty("区域内坐标")
     @Convert(converter = CoordinateConverter.class)
+    @ExcelProperty("区域内坐标")
     private CoordinateDTO coordinate;
 
     @ApiModelProperty("资产id")
+    @ExcelProperty("资产id")
     @Searchable
     private Long assetId;
 
     @ApiModelProperty("hash值")
+    @ExcelProperty("hash")
     @Searchable
     private String hcTxHash;
 

+ 7 - 0
src/main/java/com/izouma/nineth/domain/MetaTaskActivity.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -17,17 +18,23 @@ import javax.persistence.Entity;
 public class MetaTaskActivity extends BaseEntity{
 
     @ApiModelProperty("标题")
+    @ExcelProperty("标题")
     private String title;
 
     @ApiModelProperty("文字")
     @Column(columnDefinition = "TEXT")
+    @ExcelProperty("文字")
     private String word;
 
     @ApiModelProperty("图片")
+    @ExcelProperty("图片")
     private String picture;
+
     @ApiModelProperty("链接地址")
+    @ExcelProperty("链接地址")
     private String link;
 
     @ApiModelProperty("是否发布")
+    @ExcelProperty("是否发布")
     private boolean publish;
 }

+ 3 - 0
src/main/java/com/izouma/nineth/domain/MetaUser.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.nineth.annotations.Searchable;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -18,8 +19,10 @@ public class MetaUser extends BaseEntity {
 
     @ApiModelProperty("用户手机号")
     @Searchable
+    @ExcelProperty("手机号")
     private Long phone;
 
     @ApiModelProperty("是否允许登陆")
+    @ExcelProperty("是否允许登陆")
     private boolean allowLogin;
 }

+ 4 - 1
src/main/java/com/izouma/nineth/domain/MetaUserGold.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -15,9 +16,11 @@ import javax.persistence.Entity;
 @ApiModel("元宇宙玩家金币")
 public class MetaUserGold extends BaseEntity {
 
-    @ApiModelProperty("玩家id")
+    @ApiModelProperty("用户id")
+    @ExcelProperty("用户id")
     private Long userId;
 
     @ApiModelProperty("金币数量")
+    @ExcelProperty("金币数量")
     private int num;
 }

+ 5 - 0
src/main/java/com/izouma/nineth/domain/MetaUserGoldRecord.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -16,15 +17,19 @@ import javax.persistence.Entity;
 public class MetaUserGoldRecord extends BaseEntity {
 
     @ApiModelProperty("用户id")
+    @ExcelProperty("用户id")
     private Long userId;
 
     @ApiModelProperty("操作前金币数量")
+    @ExcelProperty("操作前数量")
     private int beforeNum;
 
     @ApiModelProperty("本次操作金币数量")
+    @ExcelProperty("本次操作数量")
     private int operationNum;
 
     @ApiModelProperty("操作后金币数量")
+    @ExcelProperty("操作后数量")
     private int afterNum;
 
 }

+ 43 - 0
src/main/java/com/izouma/nineth/domain/MetaZombie.java

@@ -0,0 +1,43 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.enums.MetaZombieType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙僵尸游戏配置")
+public class MetaZombie extends BaseEntity {
+
+    @ApiModelProperty("配置名称")
+    @ExcelProperty("配置名称")
+    private String name;
+
+    @ApiModelProperty("僵尸类型")
+    @Enumerated(EnumType.STRING)
+    @ExcelProperty("僵尸类型")
+    private MetaZombieType type;
+
+    @ApiModelProperty("僵尸积分")
+    @ExcelProperty("积分")
+    private int zombieIntegral;
+
+    @ApiModelProperty("僵尸攻击伤害")
+    @ExcelProperty("僵尸攻击伤害")
+    private int zombieAttackDamage;
+
+    @ApiModelProperty("僵尸血量")
+    @ExcelProperty("僵尸血量")
+    private int zombieBlood;
+
+}

+ 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;
 }

+ 4 - 0
src/main/java/com/izouma/nineth/domain/PublicScreenChat.java

@@ -53,6 +53,10 @@ public class PublicScreenChat extends BaseEntity {
     @ExcelProperty("消息发送时间")
     private LocalDateTime time;
 
+    @ApiModelProperty("消息是否合法")
+    @ExcelProperty("消息是否合法")
+    private boolean illegal;
+
     @Transient
     private boolean myself;
 }

+ 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;
 
 }

+ 1 - 1
src/main/java/com/izouma/nineth/dto/BuildingDTO.java

@@ -14,7 +14,7 @@ import lombok.NoArgsConstructor;
 public class BuildingDTO {
 
     @ApiModelProperty("物品id")
-    private Long itmeId;
+    private Long itemId;
 
     @ApiModelProperty("物品名称")
     private String name;

+ 38 - 0
src/main/java/com/izouma/nineth/dto/MetaZombieDTO.java

@@ -0,0 +1,38 @@
+package com.izouma.nineth.dto;
+
+import com.izouma.nineth.enums.MetaZombieType;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MetaZombieDTO {
+
+    @ApiModelProperty("场景内唯一id")
+    private Long id;
+
+    @ApiModelProperty("管理后台配置id")
+    private Long metaZombieId;
+
+    @ApiModelProperty("生成点id")
+    private Long createIndex;
+
+    @ApiModelProperty("僵尸类型")
+    @Enumerated(EnumType.STRING)
+    private MetaZombieType type;
+
+    @ApiModelProperty("剩余血量")
+    private int hp;
+
+    @ApiModelProperty("是否击杀")
+    private boolean killed;
+
+    @ApiModelProperty("坐标")
+    private CoordinateDTO pos;
+}

+ 2 - 3
src/main/java/com/izouma/nineth/enums/GameModeType.java → src/main/java/com/izouma/nineth/enums/GameCopyType.java

@@ -1,7 +1,6 @@
 package com.izouma.nineth.enums;
 
-
-public enum GameModeType {
+public enum GameCopyType {
 
     BRONZE("青铜"),
 
@@ -11,7 +10,7 @@ public enum GameModeType {
 
     private final String description;
 
-    GameModeType(String description) {
+    GameCopyType(String description) {
         this.description = description;
     }
 

+ 2 - 2
src/main/java/com/izouma/nineth/enums/MetaGameType.java → src/main/java/com/izouma/nineth/enums/MetaGame.java

@@ -1,13 +1,13 @@
 package com.izouma.nineth.enums;
 
 
-public enum MetaGameType {
+public enum MetaGame {
 
     ZOMBIE("僵尸游戏");
 
     private final String description;
 
-    MetaGameType(String description) {
+    MetaGame(String description) {
         this.description = description;
     }
 

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

@@ -3,6 +3,7 @@ package com.izouma.nineth.enums;
 
 public enum MetaItemEnum {
 
+    BUILDING("建筑"),
     META_SHOW_ROOM("元宇宙展厅");
 
     private final String description;

+ 19 - 0
src/main/java/com/izouma/nineth/enums/MetaZombieType.java

@@ -0,0 +1,19 @@
+package com.izouma.nineth.enums;
+
+
+public enum MetaZombieType {
+
+    COMMON("普通僵尸"),
+
+    SPECIAL("特殊僵尸");
+
+    private final String description;
+
+    MetaZombieType(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+}

+ 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);

+ 23 - 0
src/main/java/com/izouma/nineth/repo/MetaGameCopyRepo.java

@@ -0,0 +1,23 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaGameCopy;
+import com.izouma.nineth.enums.GameCopyType;
+import com.izouma.nineth.enums.MetaGame;
+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.util.List;
+
+public interface MetaGameCopyRepo extends JpaRepository<MetaGameCopy, Long>, JpaSpecificationExecutor<MetaGameCopy> {
+    @Query("update MetaGameCopy t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    MetaGameCopy findByGameNameAndGameCopyTypeAndPublishAndDel(MetaGame gameName, GameCopyType gameCopyType, boolean publish, boolean del);
+
+    List<MetaGameCopy> findAllByDel(boolean del);
+}

+ 15 - 0
src/main/java/com/izouma/nineth/repo/MetaGameProcessRepo.java

@@ -0,0 +1,15 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaGameProcess;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+
+public interface MetaGameProcessRepo extends JpaRepository<MetaGameProcess, Long>, JpaSpecificationExecutor<MetaGameProcess> {
+
+    @Query(value = "select * from meta_game_process m where m.user_id = ?1 and m.meta_game_copy_id = ?2 order by m.created_at desc limit 1", nativeQuery = true)
+    MetaGameProcess findDisconnected(Long userId, Long metaGameCopyId);
+
+    @Query(value = "select * from meta_game_process m where m.user_id = ?1 and m.completed = true order by m.point desc limit 1", nativeQuery = true)
+    MetaGameProcess findTopPoint(Long userId);
+}

+ 0 - 21
src/main/java/com/izouma/nineth/repo/MetaGameRepo.java

@@ -1,21 +0,0 @@
-package com.izouma.nineth.repo;
-
-import com.izouma.nineth.domain.MetaGame;
-import com.izouma.nineth.enums.GameModeType;
-import com.izouma.nineth.enums.MetaGameType;
-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;
-
-public interface MetaGameRepo extends JpaRepository<MetaGame, Long>, JpaSpecificationExecutor<MetaGame> {
-    @Query("update MetaGame t set t.del = true where t.id = ?1")
-    @Modifying
-    @Transactional
-    void softDelete(Long id);
-
-    MetaGame findByNameAndGameModeTypeAndPublishAndDel(MetaGameType name, GameModeType gameModeType, boolean publish, boolean del);
-
-}

+ 22 - 0
src/main/java/com/izouma/nineth/repo/MetaGameStageAwardRepo.java

@@ -0,0 +1,22 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaGameStageAward;
+import com.izouma.nineth.enums.MetaGame;
+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.util.List;
+
+public interface MetaGameStageAwardRepo extends JpaRepository<MetaGameStageAward, Long>, JpaSpecificationExecutor<MetaGameStageAward> {
+    @Query("update MetaGameStageAward t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    MetaGameStageAward findByGameNameAndPointAndDel(MetaGame gameName, int point, boolean del);
+
+    List<MetaGameStageAward> findAllByGameNameAndDel(MetaGame gameName, boolean del);
+}

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

@@ -16,7 +16,9 @@ public interface MetaItemRepo extends JpaRepository<MetaItem, Long>, JpaSpecific
     @Transactional
     void softDelete(Long id);
 
-    List<MetaItem> findAllByType(MetaItemEnum type);
+    List<MetaItem> findAllByTypeAndDel(MetaItemEnum type, boolean del);
+
+    List<MetaItem> findAllByDel(boolean del);
 
     MetaItem findByNameAndTypeAndDel(String name, MetaItemEnum type, boolean del);
 }

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

@@ -11,15 +11,11 @@ import java.util.List;
 
 public interface MetaShowRoomAssetRepo extends JpaRepository<MetaShowRoomAsset, Long>, JpaSpecificationExecutor<MetaShowRoomAsset> {
 
-    @Modifying
-    @Transactional
-    void deleteByShowRoomIdAndAssetId(Long showRoomId, Long assetId);
-
     @Modifying
     @Transactional
     void deleteByShowRoomId(Long showRoomId);
 
-    List<MetaShowRoomAsset> findAllByShowRoomId(Long showRoomId);
+    List<MetaShowRoomAsset> findAllByShowRoomIdAndSpaceId(Long showRoomId, Long spaceId);
 
     @Query("select s.assetId from MetaShowRoomAsset s where s.del = false and s.userId = ?1")
     List<Long> findAssetIdAllByUserId(Long userId);

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

@@ -22,5 +22,5 @@ public interface MetaTaskToUserRepo extends JpaRepository<MetaTaskToUser, Long>,
     @Modifying
     @Transactional
     @Query(value = "update MetaTaskToUser a set a.status = 'FINISH' where a.taskId = ?1 and a.del = false ")
-    void updateStatus(Long taskId);
+    void finish(Long taskId);
 }

+ 23 - 0
src/main/java/com/izouma/nineth/repo/MetaZombieRepo.java

@@ -0,0 +1,23 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaZombie;
+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.util.List;
+
+public interface MetaZombieRepo extends JpaRepository<MetaZombie, Long>, JpaSpecificationExecutor<MetaZombie> {
+    @Query("update MetaZombie t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    MetaZombie findByNameAndDel(String name, boolean del);
+
+    List<MetaZombie> findAllByDel(boolean del);
+
+    List<MetaZombie> findAllByIdInAndDel(List<Long> ids, boolean del);
+}

+ 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);
 }

+ 11 - 3
src/main/java/com/izouma/nineth/repo/SpaceObjectsInfoRepo.java

@@ -3,14 +3,22 @@ package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.SpaceObjectsInfo;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 
+import javax.transaction.Transactional;
 import java.util.List;
 
 public interface SpaceObjectsInfoRepo extends JpaRepository<SpaceObjectsInfo, Long> {
 
-    SpaceObjectsInfo findBySpaceId(Long spaceId);
+    SpaceObjectsInfo findBySpaceIdAndDel(Long spaceId, boolean del);
 
-    List<SpaceObjectsInfo> findAllByUserId(Long userId);
+    List<SpaceObjectsInfo> findAllByUserIdAndDel(Long userId, boolean del);
 
-    List<SpaceObjectsInfo> findAllByUserIdAndIdNot(Long userId, Long id);
+    List<SpaceObjectsInfo> findAllByUserIdAndDelAndIdNot(Long userId, boolean del, Long id);
+
+    @Query("update SpaceObjectsInfo t set t.del = true where t.spaceId = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(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/security/WebSecurityConfig.java

@@ -139,7 +139,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/blindBoxItem/rare/*").permitAll()
                 .antMatchers("/user/synchronizationData").permitAll()
                 .antMatchers("/rarityLabel/label/*").permitAll()
-                .antMatchers("/collection/count/*").permitAll()
+                .antMatchers("/collection/count").permitAll()
                 .antMatchers("/asset/*/metaPlayerRole").permitAll()
                 .antMatchers("/metaPlayerInfo/**").permitAll()
                 .antMatchers("/metaSpatialInfo/**").permitAll()

+ 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);

+ 15 - 8
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);
                     });
         }
@@ -875,7 +879,7 @@ public class AssetService {
 
     @Scheduled(cron = "0 0 0/1 * * ?")
     public void offTheShelfAll() {
-        LocalDateTime lastTime = LocalDateTime.now().minusDays(10);
+        LocalDateTime lastTime = LocalDateTime.now().minusDays(15);
         Set<Long> assetIds = collectionRepo
                 .findResaleCollectionOverTime(lastTime);
         assetIds.forEach(this::cancelConsignmentBySystem);
@@ -893,10 +897,12 @@ public class AssetService {
                 collectionRepo.findById(asset.getPublicCollectionId())
                         .ifPresent(collection -> {
                             collection.setSalable(false);
+                            collection.setOnShelf(false);
                             collectionRepo.save(collection);
                         });
             }
             asset.setConsignment(false);
+            asset.setPublicShow(false);
             assetRepo.saveAndFlush(asset);
         } catch (Exception e) {
             log.info("自动下架报错,assetId:" + id);
@@ -904,17 +910,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 +939,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);
         }
     }
@@ -1167,7 +1174,7 @@ public class AssetService {
                     new MetaPlayerRole(id + 1, "苍茫雷道"),
                     new MetaPlayerRole(id + 2, "炼炉天族"),
                     new MetaPlayerRole(id + 3, "未央宗"),
-                    new MetaPlayerRole(id + 4, "八门"),
+                    new MetaPlayerRole(id + 4, "八门"),
                     new MetaPlayerRole(id + 5, "人族"),
                     new MetaPlayerRole(id + 6, "凤鸣寺"),
                     new MetaPlayerRole(id + 7, "九州岛"));

+ 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;
     }
 }

+ 95 - 0
src/main/java/com/izouma/nineth/service/MetaGameCopyService.java

@@ -0,0 +1,95 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.domain.MetaGameCopy;
+import com.izouma.nineth.domain.MetaGameProcess;
+import com.izouma.nineth.domain.MetaZombie;
+import com.izouma.nineth.dto.MetaRestResult;
+import com.izouma.nineth.dto.MetaZombieDTO;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.repo.MetaGameCopyRepo;
+import com.izouma.nineth.repo.MetaGameProcessRepo;
+import com.izouma.nineth.repo.MetaZombieRepo;
+import com.izouma.nineth.utils.JpaUtils;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+@AllArgsConstructor
+public class MetaGameCopyService {
+
+    private MetaGameCopyRepo metaGameCopyRepo;
+
+    private MetaGameProcessRepo metaGameProcessRepo;
+
+    private MetaZombieRepo metaZombieRepo;
+
+    public Page<MetaGameCopy> all(PageQuery pageQuery) {
+        return metaGameCopyRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaGameCopy.class), JpaUtils.toPageRequest(pageQuery));
+    }
+
+    @Transactional
+    public void delMetaZombieId(Long metaZombieId) {
+        List<MetaGameCopy> metaGameCopies = metaGameCopyRepo.findAllByDel(false);
+        if (CollectionUtils.isNotEmpty(metaGameCopies)) {
+            metaGameCopies.forEach(metaGameCopy -> {
+                List<Long> metaZombieIds = metaGameCopy.getMetaZombieIds();
+                if (CollectionUtils.isNotEmpty(metaZombieIds)) {
+                    if (metaZombieIds.contains(metaZombieId)) {
+                        metaZombieIds.remove(metaZombieId);
+                        metaGameCopy.setMetaZombieIds(metaZombieIds);
+                        metaGameCopyRepo.save(metaGameCopy);
+                    }
+                }
+            });
+        }
+    }
+
+    public MetaRestResult<MetaGameProcess> saveProcess(MetaGameProcess metaGameProcess) {
+        if (Objects.isNull(metaGameProcess.getUserId())) {
+            return MetaRestResult.returnError("Illegal parameter : userId can not be null");
+        }
+        if (Objects.isNull(metaGameProcess.getMetaGameCopyId())) {
+            return MetaRestResult.returnError("Illegal parameter : metaGameCopyId can not be null");
+        }
+        if (Objects.isNull(metaGameProcess.getPlayerPos())) {
+            return MetaRestResult.returnError("Illegal parameter : playerPos can not be null");
+        }
+        if (CollectionUtils.isEmpty((metaGameProcess.getMetaZombieDTOS()))) {
+            return MetaRestResult.returnError("Illegal parameter : metaZombieDTOS can not be null");
+        }
+        List<MetaZombieDTO> metaZombieDTOS = metaGameProcess.getMetaZombieDTOS();
+        int point = 0;
+        for (MetaZombieDTO metaZombieDTO : metaZombieDTOS) {
+            if (Objects.isNull(metaZombieDTO.getMetaZombieId())) {
+                return MetaRestResult.returnError("Illegal parameter : metaZombieId can not be null");
+            }
+            if (Objects.isNull(metaZombieDTO.getCreateIndex())) {
+                return MetaRestResult.returnError("Illegal parameter : createIndex can not be null");
+            }
+            if (Objects.isNull(metaZombieDTO.getType())) {
+                return MetaRestResult.returnError("Illegal parameter : type can not be null");
+            }
+            if (Objects.isNull(metaZombieDTO.getPos())) {
+                return MetaRestResult.returnError("Illegal parameter : pos can not be null");
+            }
+            if (metaZombieDTO.isKilled()) {
+                MetaZombie dbMetaZombie = metaZombieRepo.findById(metaZombieDTO.getMetaZombieId()).orElse(null);
+                if (Objects.isNull(dbMetaZombie)) {
+                    return MetaRestResult.returnError("缺少僵尸配置");
+                }
+                if (dbMetaZombie.isDel()) {
+                    return MetaRestResult.returnError("配置已被删除");
+                }
+                point = point + dbMetaZombie.getZombieIntegral();
+            }
+        }
+        metaGameProcess.setPoint(point);
+        return MetaRestResult.returnSuccess(metaGameProcessRepo.save(metaGameProcess));
+    }
+}

+ 20 - 0
src/main/java/com/izouma/nineth/service/MetaGameProcessService.java

@@ -0,0 +1,20 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.domain.MetaGameProcess;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.repo.MetaGameProcessRepo;
+import com.izouma.nineth.utils.JpaUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class MetaGameProcessService {
+
+    private MetaGameProcessRepo metaGameProcessRepo;
+
+    public Page<MetaGameProcess> all(PageQuery pageQuery) {
+        return metaGameProcessRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaGameProcess.class), JpaUtils.toPageRequest(pageQuery));
+    }
+}

+ 0 - 20
src/main/java/com/izouma/nineth/service/MetaGameService.java

@@ -1,20 +0,0 @@
-package com.izouma.nineth.service;
-
-import com.izouma.nineth.domain.MetaGame;
-import com.izouma.nineth.dto.PageQuery;
-import com.izouma.nineth.repo.MetaGameRepo;
-import com.izouma.nineth.utils.JpaUtils;
-import lombok.AllArgsConstructor;
-import org.springframework.data.domain.Page;
-import org.springframework.stereotype.Service;
-
-@Service
-@AllArgsConstructor
-public class MetaGameService {
-
-    private MetaGameRepo metaGameRepo;
-
-    public Page<MetaGame> all(PageQuery pageQuery) {
-        return metaGameRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaGame.class), JpaUtils.toPageRequest(pageQuery));
-    }
-}

+ 20 - 0
src/main/java/com/izouma/nineth/service/MetaGameStageAwardService.java

@@ -0,0 +1,20 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.domain.MetaGameStageAward;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.repo.MetaGameStageAwardRepo;
+import com.izouma.nineth.utils.JpaUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class MetaGameStageAwardService {
+
+    private MetaGameStageAwardRepo metaGameStageAwardRepo;
+
+    public Page<MetaGameStageAward> all(PageQuery pageQuery) {
+        return metaGameStageAwardRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaGameStageAward.class), JpaUtils.toPageRequest(pageQuery));
+    }
+}

+ 8 - 9
src/main/java/com/izouma/nineth/service/MetaPlayerInfoService.java

@@ -8,7 +8,6 @@ import com.izouma.nineth.domain.SpaceObjectsInfo;
 import com.izouma.nineth.dto.BuildingDTO;
 import com.izouma.nineth.dto.BuildingPosDTO;
 import com.izouma.nineth.dto.MetaRestResult;
-import com.izouma.nineth.enums.MetaItemEnum;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.AssetRepo;
 import com.izouma.nineth.repo.MetaItemRepo;
@@ -30,7 +29,7 @@ public class MetaPlayerInfoService {
     private MetaItemRepo metaItemRepo;
 
     public MetaRestResult<SpaceObjectsInfo> metaSpaceInfo(Long userId, Long spaceId) {
-        SpaceObjectsInfo spaceObjectsInfo = spaceObjectsInfoRepo.findBySpaceId(spaceId);
+        SpaceObjectsInfo spaceObjectsInfo = spaceObjectsInfoRepo.findBySpaceIdAndDel(spaceId, false);
         if (Objects.isNull(spaceObjectsInfo)) {
             return MetaRestResult.returnError(String.format("不存在空间id:%S的空间信息", spaceId));
         }
@@ -38,7 +37,7 @@ public class MetaPlayerInfoService {
         // 如果是查询个人空间物品信息,统计用户剩余物品信息
         try {
             if (spaceObjectsInfo.isPersonal()) {
-                List<SpaceObjectsInfo> spaceObjectsInfos = spaceObjectsInfoRepo.findAllByUserId(userId);
+                List<SpaceObjectsInfo> spaceObjectsInfos = spaceObjectsInfoRepo.findAllByUserIdAndDel(userId, false);
                 spaceObjectsInfo.setBuildingList(buildingList(userId, spaceObjectsInfos));
             }
         } catch (Exception e) {
@@ -50,7 +49,7 @@ public class MetaPlayerInfoService {
     public MetaRestResult<SpaceObjectsInfo> personalMetaSpaceInfo(Long userId) {
         SpaceObjectsInfo spaceObjectsInfo = new SpaceObjectsInfo();
         try {
-            List<SpaceObjectsInfo> spaceObjectsInfos = spaceObjectsInfoRepo.findAllByUserId(userId);
+            List<SpaceObjectsInfo> spaceObjectsInfos = spaceObjectsInfoRepo.findAllByUserIdAndDel(userId, false);
             spaceObjectsInfo.setBuildingList(buildingList(userId, spaceObjectsInfos));
         } catch (Exception e) {
             return MetaRestResult.returnError(e.getMessage());
@@ -81,7 +80,7 @@ public class MetaPlayerInfoService {
                 map.put(key, 1);
             }
         });
-        List<SpaceObjectsInfo> spaceObjectsInfos = spaceObjectsInfoRepo.findAllByUserIdAndIdNot(dbSpaceObjectsInfo.getUserId(), dbSpaceObjectsInfo.getId());
+        List<SpaceObjectsInfo> spaceObjectsInfos = spaceObjectsInfoRepo.findAllByUserIdAndDelAndIdNot(dbSpaceObjectsInfo.getUserId(), false, dbSpaceObjectsInfo.getId());
         List<BuildingDTO> buildingDTOS = buildingList(dbSpaceObjectsInfo.getUserId(), spaceObjectsInfos);
         // 查询用户所有已经编辑过的物品id
         Set<Long> keys = map.keySet();
@@ -92,7 +91,7 @@ public class MetaPlayerInfoService {
         try {
             keys.forEach(key -> {
                 buildingDTOS.forEach(buildingDTO -> {
-                    if (key.equals(buildingDTO.getItmeId())) {
+                    if (key.equals(buildingDTO.getItemId())) {
                         if (map.get(key) > buildingDTO.getCount()) {
                             throw new BusinessException("操作失败:当前用户修改该物品数量大于用户持有最大数量");
                         }
@@ -108,7 +107,7 @@ public class MetaPlayerInfoService {
 
     private List<BuildingDTO> buildingList(Long userId, List<SpaceObjectsInfo> spaceObjectsInfos) {
         List<BuildingDTO> buildingList = new ArrayList<>();
-        List<MetaItem> metaItems = metaItemRepo.findAllByType(MetaItemEnum.META_SHOW_ROOM);
+        List<MetaItem> metaItems = metaItemRepo.findAllByDel(false);
         // 统计该用户所有物品信息
         metaItems.forEach(metaItem -> {
             List<Asset> assets = assetRepo.findAllByUserIdAndStatusInAndNameLike(userId, Constants.META_NORMAL_STATUS, "%" + metaItem.getName() + "%");
@@ -154,7 +153,7 @@ public class MetaPlayerInfoService {
         // 查询剩余未编辑物品信息
         buildingList.forEach(buildingDTO -> {
             keys.forEach(key -> {
-                if (buildingDTO.getItmeId().equals(key)) {
+                if (buildingDTO.getItemId().equals(key)) {
                     int newCount = buildingDTO.getCount() - map.get(key);
                     // 如果用户剩余物品数量为负数,返回失败
                     if (newCount < 0) {
@@ -170,7 +169,7 @@ public class MetaPlayerInfoService {
 
     public boolean check(Set<Long> keys, List<BuildingDTO> buildingList) {
         // 查询用户拥有的所有的物品id
-        List<Long> all = buildingList.stream().map(BuildingDTO::getItmeId).collect(Collectors.toList());
+        List<Long> all = buildingList.stream().map(BuildingDTO::getItemId).collect(Collectors.toList());
         // 如果用户编辑过未拥有的物品返回错误
         return new HashSet<>(all).containsAll(keys);
     }

+ 14 - 3
src/main/java/com/izouma/nineth/service/MetaShowRoomAssetService.java

@@ -33,6 +33,12 @@ public class MetaShowRoomAssetService {
 
     private MetaItemRepo metaItemRepo;
 
+    private SysConfigService sysConfigService;
+
+    private final String URL_PREFIX_TEST = "https://test.raex.vip/9th/assetDetail?id=";
+
+    private final String URL_PREFIX = "https://www.raex.vip/9th/assetDetail?id=";
+
     public Page<MetaShowRoomAsset> all(PageQuery pageQuery) {
         return metaShowRoomAssetRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaShowRoomAsset.class), JpaUtils.toPageRequest(pageQuery));
     }
@@ -66,14 +72,16 @@ public class MetaShowRoomAssetService {
         return MetaRestResult.returnSuccess("一键下架成功", Boolean.TRUE);
     }
 
-    public MetaRestResult<List<MetaShowRoomAsset>> findShowRoomAsset(Long showRoomId) {
-        List<MetaShowRoomAsset> metaShowRoomAssets = metaShowRoomAssetRepo.findAllByShowRoomId(showRoomId);
+    public MetaRestResult<List<MetaShowRoomAsset>> findShowRoomAsset(Long showRoomId, Long spaceId) {
+        List<MetaShowRoomAsset> metaShowRoomAssets = metaShowRoomAssetRepo.findAllByShowRoomIdAndSpaceId(showRoomId, spaceId);
         List<MetaShowRoomAsset> newMetaShowRoomAsset = new ArrayList<>();
+        boolean whetherTest = sysConfigService.getBoolean(Constants.WHETHER_TEST);
         metaShowRoomAssets.forEach(metaShowRoomAsset -> {
             Asset asset = assetRepo.findById(metaShowRoomAsset.getAssetId()).orElseThrow(new BusinessException(String.format("assetId[%S]的资产不存在", metaShowRoomAsset.getAssetId())));
             if (Constants.META_INOPERABLE_STATUS.contains(asset.getStatus())) {
                 metaShowRoomAssetRepo.deleteByAssetId(asset.getId());
             } else {
+                metaShowRoomAsset.setUrl(whetherTest ? URL_PREFIX_TEST.concat(String.valueOf(asset.getId())) : URL_PREFIX.concat(String.valueOf(asset.getId())));
                 metaShowRoomAsset.setAsset(asset);
                 newMetaShowRoomAsset.add(metaShowRoomAsset);
             }
@@ -85,7 +93,7 @@ public class MetaShowRoomAssetService {
     public MetaRestResult<List<Asset>> noShowRoomAndBlindBox(Long userId) {
         // 查询已上架藏品
         List<Long> assetIds = metaShowRoomAssetRepo.findAssetIdAllByUserId(userId);
-        List<MetaItem> metaItems = metaItemRepo.findAllByType(MetaItemEnum.META_SHOW_ROOM);
+        List<MetaItem> metaItems = metaItemRepo.findAllByTypeAndDel(MetaItemEnum.META_SHOW_ROOM, false);
         // 查询展厅数据
         List<Long> ids = new ArrayList<>();
         metaItems.forEach(metaItem -> {
@@ -132,6 +140,9 @@ public class MetaShowRoomAssetService {
         if (Objects.isNull(metaShowRoomAsset.getShowRoomId())) {
             return MetaServiceResult.returnError("Illegal parameter : showRoomId can not be null");
         }
+        if (Objects.isNull(metaShowRoomAsset.getSpaceId())) {
+            return MetaServiceResult.returnError("Illegal parameter : spaceId can not be null");
+        }
         if (Objects.isNull(metaShowRoomAsset.getUserId())) {
             return MetaServiceResult.returnError("Illegal parameter : userId can not be null");
         }

+ 65 - 0
src/main/java/com/izouma/nineth/service/MetaSpatialInfoService.java

@@ -1,20 +1,85 @@
 package com.izouma.nineth.service;
 
 import com.izouma.nineth.domain.MetaSpatialInfo;
+import com.izouma.nineth.domain.SpaceObjectsInfo;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MetaSpatialInfoRepo;
+import com.izouma.nineth.repo.SpaceObjectsInfoRepo;
 import com.izouma.nineth.utils.JpaUtils;
+import com.izouma.nineth.utils.ObjUtils;
+import jodd.util.StringUtil;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import javax.transaction.Transactional;
+import java.util.Objects;
+
 @Service
 @AllArgsConstructor
 public class MetaSpatialInfoService {
 
     private MetaSpatialInfoRepo metaSpatialInfoRepo;
 
+    private SpaceObjectsInfoRepo spaceObjectsInfoRepo;
+
     public Page<MetaSpatialInfo> all(PageQuery pageQuery) {
         return metaSpatialInfoRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaSpatialInfo.class), JpaUtils.toPageRequest(pageQuery));
     }
+
+    @Transactional
+    public MetaSpatialInfo save(MetaSpatialInfo record) {
+        if (Objects.nonNull(record.getAssetId())) {
+            MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByAssetIdAndDel(record.getAssetId(), false);
+            if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) {
+                throw new BusinessException("当前资产id已经存在");
+            }
+        }
+        if (StringUtil.isNotBlank(record.getHcTxHash())) {
+            MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByHcTxHashAndDel(record.getHcTxHash(), false);
+            if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) {
+                throw new BusinessException("当前hash已经存在");
+            }
+        }
+        MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByRegionAndCoordinateAndDel(record.getRegion(), record.getCoordinate(), false);
+        if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) {
+            throw new BusinessException("当前区域内已经存在该坐标的空间");
+        }
+        if (record.getId() != null) {
+            MetaSpatialInfo orig = metaSpatialInfoRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            if (Objects.isNull(record.getAssetId())) {
+                orig.setAssetId(null);
+            }
+            if (Objects.isNull(record.getUserId())) {
+                orig.setUserId(null);
+            }
+            MetaSpatialInfo save = metaSpatialInfoRepo.save(orig);
+            SpaceObjectsInfo spaceObjectsInfo = spaceObjectsInfoRepo.findBySpaceIdAndDel(save.getId(), false);
+            if (Objects.isNull(spaceObjectsInfo)) {
+                spaceObjectsInfo = new SpaceObjectsInfo();
+            }
+            spaceObjectsInfo.setSpaceId(save.getId());
+            if (Objects.isNull(spaceObjectsInfo.getUserId()) || Objects.isNull(save.getUserId()) || !spaceObjectsInfo.getUserId().equals(save.getUserId())) {
+                spaceObjectsInfo.setBuildingPosList(null);
+                spaceObjectsInfo.setUserId(Objects.isNull(save.getUserId()) ? null : save.getUserId());
+                spaceObjectsInfoRepo.save(spaceObjectsInfo);
+            }
+            return save;
+        }
+        MetaSpatialInfo save = metaSpatialInfoRepo.save(record);
+        SpaceObjectsInfo spaceObjectsInfo = new SpaceObjectsInfo();
+        spaceObjectsInfo.setSpaceId(save.getId());
+        spaceObjectsInfo.setBuildingPosList(null);
+        spaceObjectsInfo.setUserId(Objects.isNull(save.getUserId()) ? null : save.getUserId());
+        spaceObjectsInfoRepo.save(spaceObjectsInfo);
+        return save;
+    }
+
+    @Transactional
+    public void del(Long id) {
+        metaSpatialInfoRepo.softDelete(id);
+        spaceObjectsInfoRepo.softDelete(id);
+    }
 }

+ 20 - 0
src/main/java/com/izouma/nineth/service/MetaTaskService.java

@@ -2,19 +2,39 @@ package com.izouma.nineth.service;
 
 import com.izouma.nineth.domain.MetaTask;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MetaTaskRepo;
+import com.izouma.nineth.repo.MetaTaskToUserRepo;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import javax.transaction.Transactional;
+import java.util.Objects;
+
 @Service
 @AllArgsConstructor
 public class MetaTaskService {
 
     private MetaTaskRepo metaTaskRepo;
 
+    private MetaTaskToUserRepo metaTaskToUserRepo;
+
     public Page<MetaTask> all(PageQuery pageQuery) {
         return metaTaskRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaTask.class), JpaUtils.toPageRequest(pageQuery));
     }
+
+    @Transactional
+    public void finish( Long id) {
+        MetaTask metaTask = metaTaskRepo.findByIdAndDel(id, false);
+        if (Objects.isNull(metaTask)) {
+            throw new BusinessException("无记录");
+        }
+        metaTask.setFinish(true);
+        metaTaskRepo.save(metaTask);
+
+        // 将用户领取记录改为结束
+        metaTaskToUserRepo.finish(id);
+    }
 }

+ 20 - 0
src/main/java/com/izouma/nineth/service/MetaZombieService.java

@@ -0,0 +1,20 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.domain.MetaZombie;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.repo.MetaZombieRepo;
+import com.izouma.nineth.utils.JpaUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class MetaZombieService {
+
+    private MetaZombieRepo metaZombieRepo;
+
+    public Page<MetaZombie> all(PageQuery pageQuery) {
+        return metaZombieRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaZombie.class), JpaUtils.toPageRequest(pageQuery));
+    }
+}

+ 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, message = "操作频率过高,请稍后再试")
     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;

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

@@ -38,7 +38,7 @@ public class UserAssetSummaryService {
     }
 
     @Transactional
-    @RedisLock("#userId")
+    @RedisLock(value = "#userId", behavior = RedisLock.Behavior.WAIT)
     public void calculateNum(Long assetId, Long userId, Long companyId) {
         log.info("开始重新计算用户:{},companyId:{}的资产数量", userId, companyId);
         List<UserAssetSummary> userAssetSummaries = new ArrayList<>();

+ 41 - 0
src/main/java/com/izouma/nineth/utils/excel/CoordinateDTOConverter.java

@@ -0,0 +1,41 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.alibaba.fastjson.JSON;
+import com.izouma.nineth.dto.CoordinateDTO;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Objects;
+
+
+public class CoordinateDTOConverter implements Converter<CoordinateDTO> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return CoordinateDTO.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public CoordinateDTO convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (StringUtils.isEmpty(cellData.getStringValue())) {
+            return null;
+        }
+        return JSON.parseObject(cellData.getStringValue(), CoordinateDTO.class);
+    }
+
+    @Override
+    public CellData convertToExcelData(CoordinateDTO value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (Objects.nonNull(value)) {
+            return new CellData(JSON.toJSONString(value));
+        }
+        return null;
+    }
+}

+ 42 - 0
src/main/java/com/izouma/nineth/utils/excel/EntryModelTypeConverter.java

@@ -0,0 +1,42 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.izouma.nineth.enums.EntryModeType;
+
+public class EntryModelTypeConverter implements Converter<EntryModeType> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return EntryModeType.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public EntryModeType convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            for (EntryModeType value : EntryModeType.values()) {
+                if (value.getDescription().equals(cellData.getStringValue())) {
+                    return value;
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+
+    @Override
+    public CellData convertToExcelData(EntryModeType value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (value != null) {
+            return new CellData(value.getDescription());
+        }
+        return null;
+    }
+}

+ 11 - 0
src/main/java/com/izouma/nineth/utils/excel/ExcelUtils.java

@@ -24,6 +24,17 @@ public class ExcelUtils<T> {
                 .registerConverter(new PayMethodConverter())
                 .registerConverter(new MetaTaskTypeConverter())
                 .registerConverter(new MetaTaskStatusConverter())
+                .registerConverter(new CoordinateDTOConverter())
+                .registerConverter(new EntryModelTypeConverter())
+                .registerConverter(new GameCopyTypeConverter())
+                .registerConverter(new MetaGameAwardConverter())
+                .registerConverter(new MetaGameConverter())
+                .registerConverter(new MetaItemEnumConverter())
+                .registerConverter(new MetaRegionEnumConverter())
+                .registerConverter(new MetaZombieTypeConverter())
+                .registerConverter(new MetaZombieDTOConverter())
+                .registerConverter(new MintActivityRuleConverter())
+                .registerConverter(new ListConverter())
                 .doWrite(data);
     }
 }

+ 42 - 0
src/main/java/com/izouma/nineth/utils/excel/GameCopyTypeConverter.java

@@ -0,0 +1,42 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.izouma.nineth.enums.GameCopyType;
+
+public class GameCopyTypeConverter implements Converter<GameCopyType> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return GameCopyType.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public GameCopyType convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            for (GameCopyType value : GameCopyType.values()) {
+                if (value.getDescription().equals(cellData.getStringValue())) {
+                    return value;
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+
+    @Override
+    public CellData convertToExcelData(GameCopyType value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (value != null) {
+            return new CellData(value.getDescription());
+        }
+        return null;
+    }
+}

+ 42 - 0
src/main/java/com/izouma/nineth/utils/excel/ListConverter.java

@@ -0,0 +1,42 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.alibaba.fastjson.JSON;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+import java.util.Objects;
+
+
+public class ListConverter implements Converter<List> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return List.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public List convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (StringUtils.isEmpty(cellData.getStringValue())) {
+            return null;
+        }
+        return JSON.parseObject(cellData.getStringValue(), List.class);
+    }
+
+    @Override
+    public CellData convertToExcelData(List value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (Objects.nonNull(value)) {
+            return new CellData(JSON.toJSONString(value));
+        }
+        return null;
+    }
+}

+ 41 - 0
src/main/java/com/izouma/nineth/utils/excel/MetaGameAwardConverter.java

@@ -0,0 +1,41 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.alibaba.fastjson.JSON;
+import com.izouma.nineth.domain.MetaGameAward;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Objects;
+
+
+public class MetaGameAwardConverter implements Converter<MetaGameAward> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return MetaGameAward.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public MetaGameAward convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (StringUtils.isEmpty(cellData.getStringValue())) {
+            return null;
+        }
+        return JSON.parseObject(cellData.getStringValue(), MetaGameAward.class);
+    }
+
+    @Override
+    public CellData convertToExcelData(MetaGameAward value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (Objects.nonNull(value)) {
+            return new CellData(JSON.toJSONString(value));
+        }
+        return null;
+    }
+}

+ 42 - 0
src/main/java/com/izouma/nineth/utils/excel/MetaGameConverter.java

@@ -0,0 +1,42 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.izouma.nineth.enums.MetaGame;
+
+public class MetaGameConverter implements Converter<MetaGame> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return MetaGame.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public MetaGame convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            for (MetaGame value : MetaGame.values()) {
+                if (value.getDescription().equals(cellData.getStringValue())) {
+                    return value;
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+
+    @Override
+    public CellData convertToExcelData(MetaGame value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (value != null) {
+            return new CellData(value.getDescription());
+        }
+        return null;
+    }
+}

+ 42 - 0
src/main/java/com/izouma/nineth/utils/excel/MetaItemEnumConverter.java

@@ -0,0 +1,42 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.izouma.nineth.enums.MetaItemEnum;
+
+public class MetaItemEnumConverter implements Converter<MetaItemEnum> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return MetaItemEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public MetaItemEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            for (MetaItemEnum value : MetaItemEnum.values()) {
+                if (value.getDescription().equals(cellData.getStringValue())) {
+                    return value;
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+
+    @Override
+    public CellData convertToExcelData(MetaItemEnum value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (value != null) {
+            return new CellData(value.getDescription());
+        }
+        return null;
+    }
+}

+ 42 - 0
src/main/java/com/izouma/nineth/utils/excel/MetaRegionEnumConverter.java

@@ -0,0 +1,42 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.izouma.nineth.enums.MetaRegionEnum;
+
+public class MetaRegionEnumConverter implements Converter<MetaRegionEnum> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return MetaRegionEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public MetaRegionEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            for (MetaRegionEnum value : MetaRegionEnum.values()) {
+                if (value.getDescription().equals(cellData.getStringValue())) {
+                    return value;
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+
+    @Override
+    public CellData convertToExcelData(MetaRegionEnum value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (value != null) {
+            return new CellData(value.getDescription());
+        }
+        return null;
+    }
+}

+ 41 - 0
src/main/java/com/izouma/nineth/utils/excel/MetaZombieDTOConverter.java

@@ -0,0 +1,41 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.alibaba.fastjson.JSON;
+import com.izouma.nineth.dto.MetaZombieDTO;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Objects;
+
+
+public class MetaZombieDTOConverter implements Converter<MetaZombieDTO> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return MetaZombieDTO.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public MetaZombieDTO convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (StringUtils.isEmpty(cellData.getStringValue())) {
+            return null;
+        }
+        return JSON.parseObject(cellData.getStringValue(), MetaZombieDTO.class);
+    }
+
+    @Override
+    public CellData convertToExcelData(MetaZombieDTO value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (Objects.nonNull(value)) {
+            return new CellData(JSON.toJSONString(value));
+        }
+        return null;
+    }
+}

+ 42 - 0
src/main/java/com/izouma/nineth/utils/excel/MetaZombieTypeConverter.java

@@ -0,0 +1,42 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.izouma.nineth.enums.MetaZombieType;
+
+public class MetaZombieTypeConverter implements Converter<MetaZombieType> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return MetaZombieType.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public MetaZombieType convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            for (MetaZombieType value : MetaZombieType.values()) {
+                if (value.getDescription().equals(cellData.getStringValue())) {
+                    return value;
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+
+    @Override
+    public CellData convertToExcelData(MetaZombieType value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (value != null) {
+            return new CellData(value.getDescription());
+        }
+        return null;
+    }
+}

+ 41 - 0
src/main/java/com/izouma/nineth/utils/excel/MintActivityRuleConverter.java

@@ -0,0 +1,41 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.alibaba.fastjson.JSON;
+import com.izouma.nineth.dto.MintActivityRule;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Objects;
+
+
+public class MintActivityRuleConverter implements Converter<MintActivityRule> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return MintActivityRule.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public MintActivityRule convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (StringUtils.isEmpty(cellData.getStringValue())) {
+            return null;
+        }
+        return JSON.parseObject(cellData.getStringValue(), MintActivityRule.class);
+    }
+
+    @Override
+    public CellData convertToExcelData(MintActivityRule value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (Objects.nonNull(value)) {
+            return new CellData(JSON.toJSONString(value));
+        }
+        return null;
+    }
+}

+ 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")

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

@@ -29,7 +29,6 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.*;
-import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 
 @RestController
@@ -216,13 +215,14 @@ public class CollectionController extends BaseController {
         return collectionService.setOasisScancode(oasisIds);
     }
 
-    @GetMapping("/count/{search}")
-    public Map<String, String> countNum(@PathVariable String search) {
+    @GetMapping("/count")
+    public Map<String, String> countNum(@RequestParam String search) {
         PageQuery pageQuery = new PageQuery();
         pageQuery.setPage(0);
         pageQuery.setSize(1);
         pageQuery.getQuery().put("onShelf", true);
         pageQuery.getQuery().put("source", "TRANSFER");
+        pageQuery.getQuery().put("type", "DEFAULT,BLIND_BOX");
         pageQuery.getQuery().put("del", false);
         pageQuery.setSearch(search);
         pageQuery.getQuery().put("salable", false);

+ 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));
     }
 
 }

+ 0 - 67
src/main/java/com/izouma/nineth/web/MetaGameController.java

@@ -1,67 +0,0 @@
-package com.izouma.nineth.web;
-
-import com.izouma.nineth.domain.MetaGame;
-import com.izouma.nineth.dto.PageQuery;
-import com.izouma.nineth.exception.BusinessException;
-import com.izouma.nineth.repo.MetaGameRepo;
-import com.izouma.nineth.service.MetaGameService;
-import com.izouma.nineth.utils.ObjUtils;
-import com.izouma.nineth.utils.excel.ExcelUtils;
-import lombok.AllArgsConstructor;
-import org.springframework.data.domain.Page;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.List;
-import java.util.Objects;
-
-@RestController
-@RequestMapping("/metaGame")
-@AllArgsConstructor
-public class MetaGameController extends BaseController {
-    private MetaGameService metaGameService;
-    private MetaGameRepo metaGameRepo;
-
-    //@PreAuthorize("hasRole('ADMIN')")
-    @PostMapping("/save")
-    public MetaGame save(@RequestBody MetaGame record) {
-        if (record.isPublish()) {
-            MetaGame metaGame = metaGameRepo.findByNameAndGameModeTypeAndPublishAndDel(record.getName(), record.getGameModeType(), true, false);
-            if (Objects.nonNull(metaGame) && !Objects.equals(metaGame.getId(), record.getId())) {
-                throw new BusinessException("已为该游戏配置过该模式参数!");
-            }
-        }
-        if (record.getId() != null) {
-            MetaGame orig = metaGameRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
-            ObjUtils.merge(orig, record);
-            return metaGameRepo.save(orig);
-        }
-        return metaGameRepo.save(record);
-    }
-
-
-    //@PreAuthorize("hasRole('ADMIN')")
-    @PostMapping("/all")
-    public Page<MetaGame> all(@RequestBody PageQuery pageQuery) {
-        return metaGameService.all(pageQuery);
-    }
-
-    @GetMapping("/get/{id}")
-    public MetaGame get(@PathVariable Long id) {
-        return metaGameRepo.findById(id).orElseThrow(new BusinessException("无记录"));
-    }
-
-    @PostMapping("/del/{id}")
-    public void del(@PathVariable Long id) {
-        metaGameRepo.softDelete(id);
-    }
-
-    @GetMapping("/excel")
-    @ResponseBody
-    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
-        List<MetaGame> data = all(pageQuery).getContent();
-        ExcelUtils.export(response, data);
-    }
-}
-

+ 146 - 0
src/main/java/com/izouma/nineth/web/MetaGameCopyController.java

@@ -0,0 +1,146 @@
+package com.izouma.nineth.web;
+
+import com.izouma.nineth.domain.MetaGameCopy;
+import com.izouma.nineth.domain.MetaGameProcess;
+import com.izouma.nineth.domain.MetaZombie;
+import com.izouma.nineth.dto.MetaRestResult;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.GameCopyType;
+import com.izouma.nineth.enums.MetaGame;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.MetaGameCopyRepo;
+import com.izouma.nineth.repo.MetaGameProcessRepo;
+import com.izouma.nineth.repo.MetaZombieRepo;
+import com.izouma.nineth.service.MetaGameCopyService;
+import com.izouma.nineth.utils.ObjUtils;
+import com.izouma.nineth.utils.excel.ExcelUtils;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@RestController
+@RequestMapping("/metaGameCopy")
+@AllArgsConstructor
+public class MetaGameCopyController extends BaseController {
+
+    private MetaGameCopyService metaGameCopyService;
+
+    private MetaGameCopyRepo metaGameCopyRepo;
+
+    private MetaZombieRepo metaZombieRepo;
+
+    private MetaGameProcessRepo metaGameProcessRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public MetaGameCopy save(@RequestBody MetaGameCopy record) {
+        if (CollectionUtils.isNotEmpty(record.getMetaGameAwards())) {
+            AtomicInteger i = new AtomicInteger();
+            record.getMetaGameAwards().forEach(metaGameAward -> {
+                i.set(i.get() + metaGameAward.getProbability());
+            });
+            if (i.get() != 100) {
+                throw new BusinessException("奖励概率总和必须为100!");
+            }
+        }
+        if (record.isPublish()) {
+            MetaGameCopy metaGameCopy = metaGameCopyRepo.findByGameNameAndGameCopyTypeAndPublishAndDel(record.getGameName(), record.getGameCopyType(), true, false);
+            if (Objects.nonNull(metaGameCopy) && !Objects.equals(metaGameCopy.getId(), record.getId())) {
+                throw new BusinessException("已为该游戏配置过该模式参数!");
+            }
+        }
+        if (record.getId() != null) {
+            MetaGameCopy orig = metaGameCopyRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            if (CollectionUtils.isEmpty(record.getMetaZombieIds())) {
+                orig.setMetaZombieIds(null);
+            }
+            if (CollectionUtils.isEmpty(record.getMetaGameAwards())) {
+                orig.setMetaGameAwards(null);
+            }
+            return metaGameCopyRepo.save(orig);
+        }
+        return metaGameCopyRepo.save(record);
+    }
+
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/all")
+    public Page<MetaGameCopy> all(@RequestBody PageQuery pageQuery) {
+        return metaGameCopyService.all(pageQuery);
+    }
+
+    @GetMapping("/get/{id}")
+    public MetaGameCopy get(@PathVariable Long id) {
+        return metaGameCopyRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @PostMapping("/del/{id}")
+    public void del(@PathVariable Long id) {
+        metaGameCopyRepo.softDelete(id);
+    }
+
+    @PostMapping("/{metaZombieId}/delMetaZombieId")
+    public void delMetaZombieId(@PathVariable Long metaZombieId) {
+        metaGameCopyService.delMetaZombieId(metaZombieId);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<MetaGameCopy> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+
+    @GetMapping("/metaQuery")
+    public MetaRestResult<MetaGameCopy> findByGameNameAndGameCopyType(@RequestParam MetaGame gameName, @RequestParam GameCopyType gameCopyType) {
+        MetaGameCopy metaGameCopy = metaGameCopyRepo.findByGameNameAndGameCopyTypeAndPublishAndDel(gameName, gameCopyType, true, false);
+        if (Objects.isNull(metaGameCopy)) {
+            return MetaRestResult.returnError(String.format("查询不到游戏:[%S],副本:[%S]的相关配置,请联系管理员添加相关配置", gameName.getDescription(), gameCopyType.getDescription()));
+        }
+        if (CollectionUtils.isEmpty(metaGameCopy.getMetaZombieIds())) {
+            return MetaRestResult.returnError("缺少僵尸配置,请联系管理员添加相关配置");
+        }
+        if (CollectionUtils.isEmpty(metaGameCopy.getMetaGameAwards())) {
+            return MetaRestResult.returnError("缺少游戏奖励配置,请联系管理员添加相关配置");
+        }
+        List<MetaZombie> metaZombies = metaZombieRepo.findAllByIdInAndDel(metaGameCopy.getMetaZombieIds(), false);
+        if (CollectionUtils.isEmpty(metaZombies)) {
+            return MetaRestResult.returnError("根据id查询不到僵尸配置");
+        }
+        metaGameCopy.setMetaZombies(metaZombies);
+        return MetaRestResult.returnSuccess(metaGameCopy);
+    }
+
+    @PostMapping("/saveProcess")
+    public MetaRestResult<MetaGameProcess> saveProcess(@RequestBody MetaGameProcess metaGameProcess) {
+        return metaGameCopyService.saveProcess(metaGameProcess);
+    }
+
+    @GetMapping("/{userId}/{metaGameCopyId}/whetherDisConnected")
+    public MetaRestResult<Boolean> whetherDisConnected(@PathVariable Long userId, @PathVariable Long metaGameCopyId) {
+        MetaGameProcess metaGameProcess = metaGameProcessRepo.findDisconnected(userId, metaGameCopyId);
+        if (Objects.isNull(metaGameProcess)) {
+            return MetaRestResult.returnSuccess(Boolean.FALSE);
+        }
+        return MetaRestResult.returnSuccess(metaGameProcess.isDisconnected());
+    }
+
+
+    @GetMapping("/{userId}/findTopPoint")
+    public MetaRestResult<Integer> findTopPoint(@PathVariable Long userId) {
+        MetaGameProcess metaGameProcess = metaGameProcessRepo.findTopPoint(userId);
+        if (Objects.isNull(metaGameProcess)) {
+            return MetaRestResult.returnSuccess(0);
+        }
+        return MetaRestResult.returnSuccess(metaGameProcess.getPoint());
+    }
+}
+

+ 36 - 0
src/main/java/com/izouma/nineth/web/MetaGameProcessController.java

@@ -0,0 +1,36 @@
+package com.izouma.nineth.web;
+
+import com.izouma.nineth.domain.MetaGameProcess;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.repo.MetaGameProcessRepo;
+import com.izouma.nineth.service.MetaGameProcessService;
+import com.izouma.nineth.utils.excel.ExcelUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/metaGameProcess")
+@AllArgsConstructor
+public class MetaGameProcessController extends BaseController {
+    private MetaGameProcessService metaGameProcessService;
+    private MetaGameProcessRepo metaGameProcessRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/all")
+    public Page<MetaGameProcess> all(@RequestBody PageQuery pageQuery) {
+        return metaGameProcessService.all(pageQuery);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<MetaGameProcess> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+}
+

+ 72 - 0
src/main/java/com/izouma/nineth/web/MetaGameStageAwardController.java

@@ -0,0 +1,72 @@
+package com.izouma.nineth.web;
+
+import com.izouma.nineth.domain.MetaGameStageAward;
+import com.izouma.nineth.dto.MetaRestResult;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.MetaGame;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.MetaGameStageAwardRepo;
+import com.izouma.nineth.service.MetaGameStageAwardService;
+import com.izouma.nineth.utils.ObjUtils;
+import com.izouma.nineth.utils.excel.ExcelUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Objects;
+
+@RestController
+@RequestMapping("/metaGameStageAward")
+@AllArgsConstructor
+public class MetaGameStageAwardController extends BaseController {
+    private MetaGameStageAwardService metaGameStageAwardService;
+    private MetaGameStageAwardRepo metaGameStageAwardRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public MetaGameStageAward save(@RequestBody MetaGameStageAward record) {
+        MetaGameStageAward metaGameStageAward = metaGameStageAwardRepo.findByGameNameAndPointAndDel(record.getGameName(), record.getPoint(), false);
+        if (Objects.nonNull(metaGameStageAward) && !Objects.equals(metaGameStageAward.getId(), record.getId())) {
+            throw new BusinessException("该游戏该积分的配置已经存在!");
+        }
+        if (record.getId() != null) {
+            MetaGameStageAward orig = metaGameStageAwardRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            return metaGameStageAwardRepo.save(orig);
+        }
+        return metaGameStageAwardRepo.save(record);
+    }
+
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/all")
+    public Page<MetaGameStageAward> all(@RequestBody PageQuery pageQuery) {
+        return metaGameStageAwardService.all(pageQuery);
+    }
+
+    @GetMapping("/get/{id}")
+    public MetaGameStageAward get(@PathVariable Long id) {
+        return metaGameStageAwardRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @PostMapping("/del/{id}")
+    public void del(@PathVariable Long id) {
+        metaGameStageAwardRepo.softDelete(id);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<MetaGameStageAward> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+
+    @GetMapping("/metaFindByGameName")
+    public MetaRestResult<List<MetaGameStageAward>> metaFindByGameName(@RequestParam MetaGame gameName) {
+        return MetaRestResult.returnSuccess(metaGameStageAwardRepo.findAllByGameNameAndDel(gameName, false));
+    }
+}
+

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

@@ -61,9 +61,9 @@ public class MetaShowRoomAssetController extends BaseController {
         return metaShowRoomAssetService.putOffAll(showRoomId);
     }
 
-    @GetMapping("/{showRoomId}/findShowRoomAsset")
-    public MetaRestResult<List<MetaShowRoomAsset>> findShowRoomAsset(@PathVariable Long showRoomId) {
-        return metaShowRoomAssetService.findShowRoomAsset(showRoomId);
+    @GetMapping("/{showRoomId}/{spaceId}/findShowRoomAsset")
+    public MetaRestResult<List<MetaShowRoomAsset>> findShowRoomAsset(@PathVariable Long showRoomId, @PathVariable Long spaceId) {
+        return metaShowRoomAssetService.findShowRoomAsset(showRoomId, spaceId);
     }
 }
 

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

@@ -6,9 +6,7 @@ import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MetaSpatialInfoRepo;
 import com.izouma.nineth.service.MetaSpatialInfoService;
-import com.izouma.nineth.utils.ObjUtils;
 import com.izouma.nineth.utils.excel.ExcelUtils;
-import jodd.util.StringUtil;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
@@ -28,37 +26,9 @@ public class MetaSpatialInfoController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     public MetaSpatialInfo save(@RequestBody MetaSpatialInfo record) {
-        if (Objects.nonNull(record.getAssetId())) {
-            MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByAssetIdAndDel(record.getAssetId(), false);
-            if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) {
-                throw new BusinessException("当前资产id已经存在");
-            }
-        }
-        if (StringUtil.isNotBlank(record.getHcTxHash())) {
-            MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByHcTxHashAndDel(record.getHcTxHash(), false);
-            if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) {
-                throw new BusinessException("当前hash已经存在");
-            }
-        }
-        MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByRegionAndCoordinateAndDel(record.getRegion(), record.getCoordinate(), false);
-        if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) {
-            throw new BusinessException("当前区域内已经存在该坐标的空间");
-        }
-        if (record.getId() != null) {
-            MetaSpatialInfo orig = metaSpatialInfoRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
-            ObjUtils.merge(orig, record);
-            if (Objects.isNull(record.getAssetId())) {
-                orig.setAssetId(null);
-            }
-            if (Objects.isNull(record.getUserId())) {
-                orig.setUserId(null);
-            }
-            return metaSpatialInfoRepo.save(orig);
-        }
-        return metaSpatialInfoRepo.save(record);
+        return metaSpatialInfoService.save(record);
     }
 
-
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
     public Page<MetaSpatialInfo> all(@RequestBody PageQuery pageQuery) {
@@ -72,7 +42,7 @@ public class MetaSpatialInfoController extends BaseController {
 
     @PostMapping("/del/{id}")
     public void del(@PathVariable Long id) {
-        metaSpatialInfoRepo.softDelete(id);
+        metaSpatialInfoService.del(id);
     }
 
     @GetMapping("/excel")

+ 1 - 10
src/main/java/com/izouma/nineth/web/MetaTaskController.java

@@ -19,7 +19,6 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Objects;
 
 @RestController
 @RequestMapping("/metaTask")
@@ -87,15 +86,7 @@ public class MetaTaskController extends BaseController {
 
     @PostMapping("/{id}/finish")
     private void finish(@PathVariable Long id) {
-        MetaTask metaTask = metaTaskRepo.findByIdAndDel(id, false);
-        if (Objects.isNull(metaTask)) {
-            throw new BusinessException("无记录");
-        }
-        metaTask.setFinish(true);
-        metaTaskRepo.save(metaTask);
-
-        // 将用户领取记录改为结束
-        metaTaskToUserRepo.updateStatus(id);
+        metaTaskService.finish(id);
     }
 
 }

+ 4 - 14
src/main/java/com/izouma/nineth/web/MetaUserController.java

@@ -1,13 +1,13 @@
 package com.izouma.nineth.web;
 
+import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.domain.MetaUser;
-import com.izouma.nineth.domain.SysConfig;
 import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MetaUserRepo;
-import com.izouma.nineth.repo.SysConfigRepo;
 import com.izouma.nineth.service.MetaUserService;
+import com.izouma.nineth.service.SysConfigService;
 import com.izouma.nineth.utils.ObjUtils;
 import com.izouma.nineth.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
@@ -26,9 +26,7 @@ public class MetaUserController extends BaseController {
     private MetaUserService metaUserService;
     private MetaUserRepo metaUserRepo;
 
-    private SysConfigRepo sysConfigRepo;
-
-    private final String INTERNAL_TEST = "internal_test";
+    private SysConfigService sysConfigService;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -74,15 +72,7 @@ public class MetaUserController extends BaseController {
 
     @GetMapping("/internalTest")
     public MetaRestResult<Boolean> internalTest() {
-        SysConfig sysConfig = sysConfigRepo.findByName(INTERNAL_TEST).orElse(null);
-        if (Objects.isNull(sysConfig)) {
-            return MetaRestResult.returnError("缺少内测开关配置");
-        }
-        String value = sysConfig.getValue();
-        if ("1".equals(value)) {
-            return MetaRestResult.returnSuccess(Boolean.TRUE);
-        }
-        return MetaRestResult.returnSuccess(Boolean.FALSE);
+        return MetaRestResult.returnSuccess(sysConfigService.getBoolean(Constants.INTERNAL_TEST));
     }
 }
 

+ 96 - 0
src/main/java/com/izouma/nineth/web/MetaZombieController.java

@@ -0,0 +1,96 @@
+package com.izouma.nineth.web;
+
+import com.izouma.nineth.domain.MetaGameCopy;
+import com.izouma.nineth.domain.MetaZombie;
+import com.izouma.nineth.dto.MetaRestResult;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.MetaGameCopyRepo;
+import com.izouma.nineth.repo.MetaZombieRepo;
+import com.izouma.nineth.service.MetaZombieService;
+import com.izouma.nineth.utils.ObjUtils;
+import com.izouma.nineth.utils.excel.ExcelUtils;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Objects;
+
+@RestController
+@RequestMapping("/metaZombie")
+@AllArgsConstructor
+public class MetaZombieController extends BaseController {
+    private MetaZombieService metaZombieService;
+    private MetaZombieRepo metaZombieRepo;
+
+    private MetaGameCopyRepo metaGameCopyRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public MetaZombie save(@RequestBody MetaZombie record) {
+        MetaZombie metaZombie = metaZombieRepo.findByNameAndDel(record.getName(), false);
+        if (Objects.nonNull(metaZombie) && !Objects.equals(metaZombie.getId(), record.getId())) {
+            throw new BusinessException("该配置名称已经存在!");
+        }
+        if (record.getId() != null) {
+            MetaZombie orig = metaZombieRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            return metaZombieRepo.save(orig);
+        }
+        return metaZombieRepo.save(record);
+    }
+
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/all")
+    public Page<MetaZombie> all(@RequestBody PageQuery pageQuery) {
+        return metaZombieService.all(pageQuery);
+    }
+
+    @GetMapping("/get/{id}")
+    public MetaZombie get(@PathVariable Long id) {
+        return metaZombieRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @GetMapping("/checkApplication/{id}")
+    public void checkApplication(@PathVariable Long id) {
+        List<MetaGameCopy> metaGameCopies = metaGameCopyRepo.findAllByDel(false);
+        if (CollectionUtils.isNotEmpty(metaGameCopies)) {
+            metaGameCopies.forEach(metaGameCopy -> {
+                List<Long> metaZombieIds = metaGameCopy.getMetaZombieIds();
+                if (CollectionUtils.isNotEmpty(metaZombieIds)) {
+                    if (metaZombieIds.contains(id)) {
+                        throw new BusinessException("当前配置已经被应用,请先删除所有应用配置");
+                    }
+                }
+            });
+        }
+    }
+
+    @PostMapping("/del/{id}")
+    public void del(@PathVariable Long id) {
+        metaZombieRepo.softDelete(id);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<MetaZombie> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+
+    @GetMapping("/findAll")
+    public List<MetaZombie> findAll() {
+        return metaZombieRepo.findAllByDel(false);
+    }
+
+    @GetMapping("/metaFindAll")
+    public MetaRestResult<List<MetaZombie>> metaFindAll() {
+        return MetaRestResult.returnSuccess(metaZombieRepo.findAllByDel(false));
+    }
+}
+

+ 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;
                         }
                     }

Some files were not shown because too many files changed in this diff