Quellcode durchsuchen

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

sunkean vor 3 Jahren
Ursprung
Commit
668e03bc69
100 geänderte Dateien mit 2036 neuen und 361 gelöschten Zeilen
  1. 39 0
      src/main/java/com/izouma/nineth/aspect/MetaUserPropSaveAspect.java
  2. 14 1
      src/main/java/com/izouma/nineth/config/MetaConstants.java
  3. 0 15
      src/main/java/com/izouma/nineth/config/WebSocketConfig.java
  4. 2 0
      src/main/java/com/izouma/nineth/converter/MetaGameAwardConverter.java
  5. 2 0
      src/main/java/com/izouma/nineth/converter/MetaGameAwardListConverter.java
  6. 27 0
      src/main/java/com/izouma/nineth/converter/MetaLuckyDrawAwardConverter.java
  7. 34 0
      src/main/java/com/izouma/nineth/converter/MetaLuckyDrawAwardListConverter.java
  8. 2 0
      src/main/java/com/izouma/nineth/converter/MetaPlayerRoleListConverter.java
  9. 2 0
      src/main/java/com/izouma/nineth/converter/MetaZombieDTOListConverter.java
  10. 21 6
      src/main/java/com/izouma/nineth/domain/MetaAdvertRecord.java
  11. 27 0
      src/main/java/com/izouma/nineth/domain/MetaChannel.java
  12. 31 0
      src/main/java/com/izouma/nineth/domain/MetaFeedBack.java
  13. 1 5
      src/main/java/com/izouma/nineth/domain/MetaGameBoxPoints.java
  14. 74 0
      src/main/java/com/izouma/nineth/domain/MetaLuckyDraw.java
  15. 31 0
      src/main/java/com/izouma/nineth/domain/MetaLuckyDrawAwardModel.java
  16. 47 0
      src/main/java/com/izouma/nineth/domain/MetaLuckyDrawAwardReceiveRecord.java
  17. 7 43
      src/main/java/com/izouma/nineth/domain/MetaMMOLoginInfo.java
  18. 42 0
      src/main/java/com/izouma/nineth/domain/MetaParamsConfig.java
  19. 62 0
      src/main/java/com/izouma/nineth/domain/MetaProp.java
  20. 27 0
      src/main/java/com/izouma/nineth/domain/MetaResources.java
  21. 9 3
      src/main/java/com/izouma/nineth/domain/MetaSign.java
  22. 10 4
      src/main/java/com/izouma/nineth/domain/MetaSignAward.java
  23. 2 2
      src/main/java/com/izouma/nineth/domain/MetaSignAwardDrawRecord.java
  24. 6 0
      src/main/java/com/izouma/nineth/domain/MetaSignRecord.java
  25. 9 1
      src/main/java/com/izouma/nineth/domain/MetaSwitch.java
  26. 10 1
      src/main/java/com/izouma/nineth/domain/MetaTask.java
  27. 5 0
      src/main/java/com/izouma/nineth/domain/MetaTaskToUser.java
  28. 21 0
      src/main/java/com/izouma/nineth/domain/MetaTourist.java
  29. 4 0
      src/main/java/com/izouma/nineth/domain/MetaUserGoldRecord.java
  30. 89 0
      src/main/java/com/izouma/nineth/domain/MetaUserProp.java
  31. 72 0
      src/main/java/com/izouma/nineth/domain/MetaUserPropRecord.java
  32. 26 0
      src/main/java/com/izouma/nineth/domain/MetaUserTaskAwardReceivedRecord.java
  33. 44 16
      src/main/java/com/izouma/nineth/domain/PublicScreenChat.java
  34. 27 0
      src/main/java/com/izouma/nineth/domain/RaexSnapshot.java
  35. 0 16
      src/main/java/com/izouma/nineth/domain/Snapshot.java
  36. 0 29
      src/main/java/com/izouma/nineth/dto/MMOMessage.java
  37. 0 20
      src/main/java/com/izouma/nineth/dto/MMOSingleMessage.java
  38. 25 0
      src/main/java/com/izouma/nineth/dto/MetaAwardReceiveDTO.java
  39. 44 0
      src/main/java/com/izouma/nineth/dto/MetaBagAssetDTO.java
  40. 12 0
      src/main/java/com/izouma/nineth/dto/MetaTouristDTO.java
  41. 18 0
      src/main/java/com/izouma/nineth/dto/MetaUserBagDTO.java
  42. 2 5
      src/main/java/com/izouma/nineth/dto/SnapshotDTO.java
  43. 20 0
      src/main/java/com/izouma/nineth/enums/ChatType.java
  44. 10 5
      src/main/java/com/izouma/nineth/enums/EntryModeType.java
  45. 3 3
      src/main/java/com/izouma/nineth/enums/MetaAwardTypeEnum.java
  46. 21 0
      src/main/java/com/izouma/nineth/enums/MetaPropOperationType.java
  47. 5 7
      src/main/java/com/izouma/nineth/enums/MetaPropTriggerType.java
  48. 26 0
      src/main/java/com/izouma/nineth/enums/MetaPropType.java
  49. 20 0
      src/main/java/com/izouma/nineth/enums/MetaPropUsedType.java
  50. 19 0
      src/main/java/com/izouma/nineth/enums/MetaSwitchType.java
  51. 0 2
      src/main/java/com/izouma/nineth/enums/MetaTaskStatus.java
  52. 3 3
      src/main/java/com/izouma/nineth/enums/MetaTaskType.java
  53. 1 1
      src/main/java/com/izouma/nineth/listener/RegisterListener.java
  54. 4 3
      src/main/java/com/izouma/nineth/repo/AssetRepo.java
  55. 4 0
      src/main/java/com/izouma/nineth/repo/BannerRepo.java
  56. 3 2
      src/main/java/com/izouma/nineth/repo/MetaAdvertRecordRepo.java
  57. 21 0
      src/main/java/com/izouma/nineth/repo/MetaChannelRepo.java
  58. 10 0
      src/main/java/com/izouma/nineth/repo/MetaFeedBackRepo.java
  59. 3 4
      src/main/java/com/izouma/nineth/repo/MetaGameBoxPointsRepo.java
  60. 18 0
      src/main/java/com/izouma/nineth/repo/MetaLuckyDrawAwardReceiveRecordRepo.java
  61. 18 0
      src/main/java/com/izouma/nineth/repo/MetaLuckyDrawRepo.java
  62. 0 5
      src/main/java/com/izouma/nineth/repo/MetaMMOLoginInfoRepo.java
  63. 21 0
      src/main/java/com/izouma/nineth/repo/MetaParamsConfigRepo.java
  64. 19 0
      src/main/java/com/izouma/nineth/repo/MetaPropRepo.java
  65. 20 0
      src/main/java/com/izouma/nineth/repo/MetaResourcesRepo.java
  66. 2 2
      src/main/java/com/izouma/nineth/repo/MetaSignAwardRepo.java
  67. 3 3
      src/main/java/com/izouma/nineth/repo/MetaSignRecordRepo.java
  68. 1 1
      src/main/java/com/izouma/nineth/repo/MetaSignRepo.java
  69. 2 1
      src/main/java/com/izouma/nineth/repo/MetaSwitchRepo.java
  70. 2 2
      src/main/java/com/izouma/nineth/repo/MetaTaskRepo.java
  71. 9 1
      src/main/java/com/izouma/nineth/repo/MetaTaskToUserRepo.java
  72. 9 0
      src/main/java/com/izouma/nineth/repo/MetaTouristRepo.java
  73. 9 0
      src/main/java/com/izouma/nineth/repo/MetaUserPropRecordRepo.java
  74. 23 0
      src/main/java/com/izouma/nineth/repo/MetaUserPropRepo.java
  75. 15 0
      src/main/java/com/izouma/nineth/repo/MetaUserTaskAwardReceivedRecordRepo.java
  76. 33 0
      src/main/java/com/izouma/nineth/repo/RaexSnapshotRepo.java
  77. 1 1
      src/main/java/com/izouma/nineth/repo/UserDetailRepo.java
  78. 1 0
      src/main/java/com/izouma/nineth/security/WebSecurityConfig.java
  79. 1 1
      src/main/java/com/izouma/nineth/service/MetaAccessoriesService.java
  80. 26 0
      src/main/java/com/izouma/nineth/service/MetaAdvertRecordService.java
  81. 92 0
      src/main/java/com/izouma/nineth/service/MetaAwardReceiveService.java
  82. 20 0
      src/main/java/com/izouma/nineth/service/MetaChannelService.java
  83. 20 0
      src/main/java/com/izouma/nineth/service/MetaFeedBackService.java
  84. 3 7
      src/main/java/com/izouma/nineth/service/MetaGameBoxPointsService.java
  85. 10 4
      src/main/java/com/izouma/nineth/service/MetaGameCopyService.java
  86. 83 0
      src/main/java/com/izouma/nineth/service/MetaLuckyDrawAwardReceiveRecordService.java
  87. 20 0
      src/main/java/com/izouma/nineth/service/MetaLuckyDrawService.java
  88. 31 0
      src/main/java/com/izouma/nineth/service/MetaParamsConfigService.java
  89. 20 0
      src/main/java/com/izouma/nineth/service/MetaPropService.java
  90. 20 0
      src/main/java/com/izouma/nineth/service/MetaResourcesService.java
  91. 20 37
      src/main/java/com/izouma/nineth/service/MetaSignAwardDrawRecordService.java
  92. 34 42
      src/main/java/com/izouma/nineth/service/MetaSignRecordService.java
  93. 1 1
      src/main/java/com/izouma/nineth/service/MetaTaskService.java
  94. 19 18
      src/main/java/com/izouma/nineth/service/MetaTaskToUserService.java
  95. 3 3
      src/main/java/com/izouma/nineth/service/MetaUserGoldService.java
  96. 27 0
      src/main/java/com/izouma/nineth/service/MetaUserPropRecordService.java
  97. 153 0
      src/main/java/com/izouma/nineth/service/MetaUserPropService.java
  98. 75 0
      src/main/java/com/izouma/nineth/service/MetaUserTaskAwardReceivedRecordService.java
  99. 32 35
      src/main/java/com/izouma/nineth/service/MetaUserTaskProgressService.java
  100. 20 0
      src/main/java/com/izouma/nineth/service/RaexSnapshotService.java

+ 39 - 0
src/main/java/com/izouma/nineth/aspect/MetaUserPropSaveAspect.java

@@ -0,0 +1,39 @@
+package com.izouma.nineth.aspect;
+
+import com.izouma.nineth.service.MetaUserPropService;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.annotation.After;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+@Aspect
+@Component
+@Slf4j
+public class MetaUserPropSaveAspect {
+
+    private final ScheduledExecutorService executorService;
+
+    private final MetaUserPropService metaUserPropService;
+
+    public MetaUserPropSaveAspect(ScheduledExecutorService executorService, MetaUserPropService metaUserPropService) {
+        this.executorService = executorService;
+        this.metaUserPropService = metaUserPropService;
+    }
+
+    @After("execution(* com.izouma.nineth.repo.MetaUserPropRepo.save(..))")
+    public void redisLock() {
+        log.info("enter MetaUserPropSaveAspect");
+        try {
+            synchronized (MetaUserPropSaveAspect.class) {
+                executorService.schedule(() -> {
+                    metaUserPropService.aspect();
+                }, 500, TimeUnit.MILLISECONDS);
+            }
+        } catch (Exception e) {
+            log.error("MetaUserPropSaveAspect error", e);
+        }
+    }
+}

+ 14 - 1
src/main/java/com/izouma/nineth/config/MetaConstants.java

@@ -4,5 +4,18 @@ import java.util.List;
 
 public interface MetaConstants {
 
-    List<Long> GAME_COPY_IDS = List.of(2822644L, 8746067L, 8734418L, 8734417L);
+    List<Long> GAME_COPY_IDS = List.of(8746067L, 8734418L, 8734417L);
+
+    String LIKE = "%";
+
+    String META_BAG_COLLECTION_NAME = "META_BAG_COLLECTION_NAME";
+
+    String META_CAN_USE_COLLECTION_ID = "META_CAN_USE_COLLECTION_ID";
+
+    String META_LUCKY_DRAW_ID = "META_LUCKY_DRAW_ID";
+
+    String COMMA = ",";
+
+    String BLANK = " ";
+
 }

+ 0 - 15
src/main/java/com/izouma/nineth/config/WebSocketConfig.java

@@ -1,15 +0,0 @@
-package com.izouma.nineth.config;
-
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.socket.server.standard.ServerEndpointExporter;
-
-@Configuration
-public class WebSocketConfig {
-
-    @Bean
-    public ServerEndpointExporter serverEndpointExporter() {
-        return new ServerEndpointExporter();
-    }
-}

+ 2 - 0
src/main/java/com/izouma/nineth/converter/MetaGameAwardConverter.java

@@ -5,7 +5,9 @@ import com.izouma.nineth.domain.MetaGameAward;
 import org.apache.commons.lang3.StringUtils;
 
 import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
 
+@Converter
 public class MetaGameAwardConverter implements AttributeConverter<MetaGameAward, String> {
 
     @Override

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

@@ -6,8 +6,10 @@ import com.izouma.nineth.domain.MetaGameAward;
 import org.apache.commons.lang3.StringUtils;
 
 import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
 import java.util.List;
 
+@Converter
 public class MetaGameAwardListConverter implements AttributeConverter<List<MetaGameAward>, String> {
 
     @Override

+ 27 - 0
src/main/java/com/izouma/nineth/converter/MetaLuckyDrawAwardConverter.java

@@ -0,0 +1,27 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.izouma.nineth.domain.MetaLuckyDrawAwardModel;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+@Converter
+public class MetaLuckyDrawAwardConverter implements AttributeConverter<MetaLuckyDrawAwardModel, String> {
+
+    @Override
+    public String convertToDatabaseColumn(MetaLuckyDrawAwardModel fileObject) {
+        if (fileObject != null)
+            return JSON.toJSONString(fileObject);
+        return null;
+    }
+
+    @Override
+    public MetaLuckyDrawAwardModel convertToEntityAttribute(String s) {
+        if (StringUtils.isNotEmpty(s)) {
+            return JSON.parseObject(s, MetaLuckyDrawAwardModel.class);
+        }
+        return null;
+    }
+}

+ 34 - 0
src/main/java/com/izouma/nineth/converter/MetaLuckyDrawAwardListConverter.java

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

+ 2 - 0
src/main/java/com/izouma/nineth/converter/MetaPlayerRoleListConverter.java

@@ -6,8 +6,10 @@ import com.izouma.nineth.dto.MetaPlayerRole;
 import org.apache.commons.lang3.StringUtils;
 
 import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
 import java.util.List;
 
+@Converter
 public class MetaPlayerRoleListConverter implements AttributeConverter<List<MetaPlayerRole>, String> {
 
     @Override

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

@@ -6,8 +6,10 @@ import com.izouma.nineth.dto.MetaZombieDTO;
 import org.apache.commons.lang3.StringUtils;
 
 import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
 import java.util.List;
 
+@Converter
 public class MetaZombieDTOListConverter implements AttributeConverter<List<MetaZombieDTO>, String> {
 
     @Override

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

@@ -8,7 +8,9 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import javax.persistence.Column;
 import javax.persistence.Entity;
+import java.math.BigDecimal;
 
 @Data
 @AllArgsConstructor
@@ -25,12 +27,25 @@ public class MetaAdvertRecord extends BaseEntity {
     @ExcelProperty("链接地址")
     private String link;
 
-    @ApiModelProperty("用途")
-    @ExcelProperty("用途")
-    private int application;
+    @ApiModelProperty("编号")
+    @ExcelProperty("编号")
+    private int number;
 
-    @ApiModelProperty("是否发布")
-    @ExcelProperty("是否发布")
-    private boolean publish;
+    @ApiModelProperty("区域")
+    @ExcelProperty("区域")
+    private int region;
+
+    @ApiModelProperty("名称")
+    @ExcelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("详情")
+    @ExcelProperty("详情")
+    private String detail;
+
+    @ApiModelProperty("价格")
+    @ExcelProperty("价格")
+    @Column(precision = 10, scale = 2)
+    private BigDecimal price;
 
 }

+ 27 - 0
src/main/java/com/izouma/nineth/domain/MetaChannel.java

@@ -0,0 +1,27 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity
+@ApiModel("频道管理")
+public class MetaChannel extends BaseEntity{
+
+    @ApiModelProperty("名称")
+    @ExcelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("介绍")
+    @ExcelProperty("介绍")
+    private String intro;
+
+}

+ 31 - 0
src/main/java/com/izouma/nineth/domain/MetaFeedBack.java

@@ -0,0 +1,31 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙用户反馈")
+public class MetaFeedBack extends BaseEntity {
+
+    @ApiModelProperty("用户ID")
+    @ExcelProperty("用户ID")
+    private Long userId;
+
+    @ApiModelProperty("反馈详情")
+    @ExcelProperty("反馈详情")
+    private String detail;
+
+    @ApiModelProperty("图片")
+    @ExcelProperty("图片")
+    private String pic;
+
+}

+ 1 - 5
src/main/java/com/izouma/nineth/domain/MetaGameBoxPoints.java

@@ -3,7 +3,6 @@ package com.izouma.nineth.domain;
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.nineth.annotations.Searchable;
-import com.izouma.nineth.enums.MetaPointTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -11,8 +10,6 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
 import javax.persistence.Transient;
 
 @Data
@@ -29,8 +26,7 @@ public class MetaGameBoxPoints extends BaseEntity {
 
     @ApiModelProperty("类型")
     @ExcelProperty("类型")
-    @Enumerated(EnumType.STRING)
-    private MetaPointTypeEnum type;
+    private int type;
 
     @ApiModelProperty("昵称")
     @ExcelIgnore

+ 74 - 0
src/main/java/com/izouma/nineth/domain/MetaLuckyDraw.java

@@ -0,0 +1,74 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.converter.MetaLuckyDrawAwardListConverter;
+import com.izouma.nineth.converter.MintRuleConverter;
+import com.izouma.nineth.dto.MintActivityRule;
+import com.izouma.nineth.enums.EntryModeType;
+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 MetaLuckyDraw extends BaseEntity {
+
+    @ApiModelProperty("活动名称")
+    @ExcelProperty("活动名称")
+    private String name;
+
+    @ApiModelProperty("规则说明")
+    @Column(columnDefinition = "TEXT")
+    @ExcelProperty("规则说明")
+    private String detail;
+
+    @ApiModelProperty("入场方式")
+    @Enumerated(EnumType.STRING)
+    @ExcelProperty("入场方式")
+    private EntryModeType entryModeType;
+
+    @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;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = MetaLuckyDrawAwardListConverter.class)
+    @ApiModelProperty("奖励配置")
+    @ExcelProperty("奖励配置")
+    private List<MetaLuckyDrawAwardModel> metaLuckDrawAwards;
+
+    @ApiModelProperty("道具id")
+    @ExcelProperty("道具id")
+    private Long metaPropId;
+
+    @ApiModelProperty("道具数量")
+    @ExcelProperty("道具数量")
+    private int metaPropNum;
+}

+ 31 - 0
src/main/java/com/izouma/nineth/domain/MetaLuckyDrawAwardModel.java

@@ -0,0 +1,31 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.enums.MetaAwardTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MetaLuckyDrawAwardModel {
+
+    @ApiModelProperty("奖励名称")
+    private String name;
+
+    @ApiModelProperty("奖励类型")
+    private MetaAwardTypeEnum awardType;
+
+    @ApiModelProperty("奖励配置(金币奖励为金币数量,NFT奖励为NFT奖励图片地址)")
+    private String config;
+
+    @ApiModelProperty("概率")
+    private int probability;
+
+    @ApiModelProperty("是否需要限制数量(针对NFT奖励)")
+    private boolean limitNum;
+
+    @ApiModelProperty("奖池最大数量")
+    private int maxNum;
+}

+ 47 - 0
src/main/java/com/izouma/nineth/domain/MetaLuckyDrawAwardReceiveRecord.java

@@ -0,0 +1,47 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.MetaLuckyDrawAwardConverter;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Convert;
+import javax.persistence.Entity;
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙抽奖活动领取记录")
+public class MetaLuckyDrawAwardReceiveRecord extends BaseEntity {
+
+    @ApiModelProperty("用户id")
+    @ExcelProperty("用户id")
+    @Searchable
+    private Long userId;
+
+    @ApiModelProperty("抽奖活动id")
+    @ExcelProperty("抽奖活动id")
+    @Searchable
+    private Long metaLuckyDrawId;
+
+    @ApiModelProperty("奖励名称")
+    @ExcelProperty("奖励名称")
+    @Searchable
+    private String metaLuckDrawAwardName;
+
+    @ApiModelProperty("玩家抽奖获得的奖励")
+    @ExcelProperty("玩家抽奖获得的奖励")
+    @Convert(converter = MetaLuckyDrawAwardConverter.class)
+    private MetaLuckyDrawAwardModel metaLuckDrawAward;
+
+    @ApiModelProperty("奖励获得时间")
+    @ExcelProperty("奖励获得时间")
+    private LocalDateTime receiveTime;
+
+}

+ 7 - 43
src/main/java/com/izouma/nineth/domain/MetaMMOLoginInfo.java

@@ -16,7 +16,6 @@ import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
 import javax.persistence.Table;
 import java.time.LocalDateTime;
-import java.util.Objects;
 
 @Data
 @AllArgsConstructor
@@ -104,47 +103,12 @@ public class MetaMMOLoginInfo extends BaseEntity {
     @Enumerated(EnumType.STRING)
     private MoveType moveType;
 
-    /**
-     * 根据玩家历史登陆信息初始化本次登陆信息
-     *
-     * @param metaMMOLoginInfo 历史登陆信息
-     * @return 本次登陆默认信息
-     */
-    public static MetaMMOLoginInfo initMetaMMOLoginInfo(MetaMMOLoginInfo metaMMOLoginInfo) {
-        MetaMMOLoginInfo newMetaMMOLoginInfo = new MetaMMOLoginInfo();
-        if (Objects.isNull(metaMMOLoginInfo)) {
-            newMetaMMOLoginInfo.setRegionId(0L);
-            newMetaMMOLoginInfo.setCityId(0L);
-            newMetaMMOLoginInfo.setAxisX(0F);
-            newMetaMMOLoginInfo.setAxisY(0F);
-            newMetaMMOLoginInfo.setAxisZ(0F);
-            newMetaMMOLoginInfo.setEulerX(0F);
-            newMetaMMOLoginInfo.setEulerY(0F);
-            newMetaMMOLoginInfo.setEulerZ(0F);
-            newMetaMMOLoginInfo.setTop(0);
-            newMetaMMOLoginInfo.setHat(0);
-            newMetaMMOLoginInfo.setDown(0);
-            newMetaMMOLoginInfo.setShoes(0);
-            newMetaMMOLoginInfo.setAnim(0);
-            newMetaMMOLoginInfo.setEmoji(0);
-            return newMetaMMOLoginInfo;
-        }
-        newMetaMMOLoginInfo.setCityId(metaMMOLoginInfo.getCityId());
-        newMetaMMOLoginInfo.setRegionId(metaMMOLoginInfo.getRegionId());
-        newMetaMMOLoginInfo.setAxisX(metaMMOLoginInfo.getAxisX());
-        newMetaMMOLoginInfo.setAxisY(metaMMOLoginInfo.getAxisY());
-        newMetaMMOLoginInfo.setAxisZ(metaMMOLoginInfo.getAxisZ());
-        newMetaMMOLoginInfo.setEulerX(metaMMOLoginInfo.getEulerX());
-        newMetaMMOLoginInfo.setEulerY(metaMMOLoginInfo.getEulerY());
-        newMetaMMOLoginInfo.setEulerZ(metaMMOLoginInfo.getEulerZ());
-        newMetaMMOLoginInfo.setTop(metaMMOLoginInfo.getTop());
-        newMetaMMOLoginInfo.setHat(metaMMOLoginInfo.getHat());
-        newMetaMMOLoginInfo.setDown(metaMMOLoginInfo.getDown());
-        newMetaMMOLoginInfo.setShoes(metaMMOLoginInfo.getShoes());
-        newMetaMMOLoginInfo.setAnim(metaMMOLoginInfo.getAnim());
-        newMetaMMOLoginInfo.setEmoji(metaMMOLoginInfo.getEmoji());
-        newMetaMMOLoginInfo.setRole(metaMMOLoginInfo.getRole());
-        return newMetaMMOLoginInfo;
-    }
+    @ApiModelProperty("载具id")
+    @ExcelProperty("载具id")
+    private Long vehicleId;
+
+    @ApiModelProperty("变身id")
+    @ExcelProperty("变身id")
+    private Long turnedId;
 
 }

+ 42 - 0
src/main/java/com/izouma/nineth/domain/MetaParamsConfig.java

@@ -0,0 +1,42 @@
+package com.izouma.nineth.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class MetaParamsConfig extends AuditedEntity {
+
+    @Id
+    @Column(length = 255, unique = true)
+    @ApiModelProperty(value = "名称", name = "name")
+    private String name;
+
+    @Column(name = "description")
+    @ApiModelProperty(value = "描述", name = "desc")
+    private String desc;
+
+    @ApiModelProperty(value = "值", name = "value")
+    @Column(columnDefinition = "TEXT")
+    private String value;
+
+    @Enumerated(EnumType.STRING)
+    private SysConfig.ValueType type;
+
+    public enum ValueType {
+
+        STRING,
+
+        BOOLEAN
+
+    }
+}
+

+ 62 - 0
src/main/java/com/izouma/nineth/domain/MetaProp.java

@@ -0,0 +1,62 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.enums.MetaPropTriggerType;
+import com.izouma.nineth.enums.MetaPropType;
+import com.izouma.nineth.enums.MetaPropUsedType;
+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 MetaProp extends BaseEntity {
+
+    @ApiModelProperty("名称")
+    @ExcelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("介绍")
+    @ExcelProperty("介绍")
+    private String introduction;
+
+    @ApiModelProperty("图片")
+    @ExcelProperty("图片")
+    private String pic;
+
+    @ApiModelProperty("道具类型")
+    @ExcelProperty("道具类型")
+    @Enumerated(EnumType.STRING)
+    private MetaPropType propType;
+
+    @ApiModelProperty("使用类型")
+    @ExcelProperty("使用类型")
+    @Enumerated(EnumType.STRING)
+    private MetaPropUsedType usedType;
+
+    @ApiModelProperty("触发类型")
+    @ExcelProperty("触发类型")
+    @Enumerated(EnumType.STRING)
+    private MetaPropTriggerType triggerType;
+
+    @ApiModelProperty("限时道具时间,单位小时")
+    @ExcelProperty("限时道具时间,单位小时")
+    private int times;
+
+    @ApiModelProperty("转化金币数量")
+    @ExcelProperty("转化金币数量")
+    private int goldNum;
+
+    @ApiModelProperty("是否可以直接使用")
+    @ExcelProperty("是否可以直接使用")
+    private boolean canUse;
+}

+ 27 - 0
src/main/java/com/izouma/nineth/domain/MetaResources.java

@@ -0,0 +1,27 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+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.Entity;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙资源管理")
+public class MetaResources extends BaseEntity {
+
+    @ApiModelProperty("名称")
+    @Searchable
+    private String name;
+
+    @ApiModelProperty("文件")
+    @Column(columnDefinition = "TEXT")
+    private String value;
+}

+ 9 - 3
src/main/java/com/izouma/nineth/domain/MetaSign.java

@@ -1,6 +1,7 @@
 package com.izouma.nineth.domain;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.enums.MetaAwardTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -32,9 +33,9 @@ public class MetaSign extends BaseEntity {
     @Enumerated(EnumType.STRING)
     private MetaAwardTypeEnum awardType;
 
-    @ApiModelProperty("配饰奖励配饰id")
-    @ExcelProperty("配饰奖励配饰id")
-    private Long metaAccessoriesId;
+    @ApiModelProperty("道具id")
+    @ExcelProperty("道具id")
+    private Long metaPropId;
 
     @ApiModelProperty("NFT奖励图片地址")
     @ExcelProperty("NFT奖励图片地址")
@@ -43,4 +44,9 @@ public class MetaSign extends BaseEntity {
     @ApiModelProperty("金币奖励数量")
     @ExcelProperty("金币奖励数量")
     private int goldNum;
+
+    @ApiModelProperty("频道id")
+    @ExcelProperty("频道id")
+    @Searchable
+    private Long channelId;
 }

+ 10 - 4
src/main/java/com/izouma/nineth/domain/MetaSignAward.java

@@ -2,6 +2,7 @@ package com.izouma.nineth.domain;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.enums.MetaAwardTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -34,10 +35,6 @@ public class MetaSignAward extends BaseEntity {
     @Enumerated(EnumType.STRING)
     private MetaAwardTypeEnum awardType;
 
-    @ApiModelProperty("配饰奖励配饰id")
-    @ExcelProperty("配饰奖励配饰id")
-    private Long metaAccessoriesId;
-
     @ApiModelProperty("NFT奖励图片地址")
     @ExcelProperty("NFT奖励图片地址")
     private String awardPic;
@@ -46,6 +43,15 @@ public class MetaSignAward extends BaseEntity {
     @ExcelProperty("金币奖励数量")
     private int goldNum;
 
+    @ApiModelProperty("道具id")
+    @ExcelProperty("道具id")
+    private Long metaPropId;
+
+    @ApiModelProperty("频道id")
+    @ExcelProperty("频道id")
+    @Searchable
+    private Long channelId;
+
     @Transient
     @ApiModelProperty("是否领取过")
     @ExcelIgnore

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

@@ -20,8 +20,8 @@ public class MetaSignAwardDrawRecord extends BaseEntity {
     @ExcelProperty("用户id")
     private Long userId;
 
-    @ApiModelProperty("奖励id")
-    @ExcelProperty("奖励id")
+    @ApiModelProperty("累计签到奖励id")
+    @ExcelProperty("累计签到奖励id")
     private Long metaSignAwardId;
 
     @ApiModelProperty("奖励所属时间")

+ 6 - 0
src/main/java/com/izouma/nineth/domain/MetaSignRecord.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;
 import lombok.AllArgsConstructor;
@@ -25,4 +26,9 @@ public class MetaSignRecord extends BaseEntity {
     @ExcelProperty("签到时间")
     private LocalDate signTime;
 
+    @ApiModelProperty("频道id")
+    @ExcelProperty("频道id")
+    @Searchable
+    private Long channelId;
+
 }

+ 9 - 1
src/main/java/com/izouma/nineth/domain/MetaSwitch.java

@@ -2,6 +2,7 @@ package com.izouma.nineth.domain;
 
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.enums.MetaSwitchType;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -9,12 +10,14 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 @Entity
-@ApiModel("元宇宙空间码头列表")
+@ApiModel("元宇宙开关")
 public class MetaSwitch extends BaseEntity {
 
     @ApiModelProperty("开关名称")
@@ -28,4 +31,9 @@ public class MetaSwitch extends BaseEntity {
     @ApiModelProperty("开关状态")
     @ExcelProperty("开关状态")
     private boolean status;
+
+    @ApiModelProperty("开关类型")
+    @ExcelProperty("开关类型")
+    @Enumerated(EnumType.STRING)
+    private MetaSwitchType switchType;
 }

+ 10 - 1
src/main/java/com/izouma/nineth/domain/MetaTask.java

@@ -21,7 +21,7 @@ import javax.persistence.Enumerated;
 @NoArgsConstructor
 @Entity
 @ApiModel("元宇宙任务")
-public class MetaTask extends BaseEntity{
+public class MetaTask extends BaseEntity {
 
     @ApiModelProperty("任务名称")
     @Searchable
@@ -70,4 +70,13 @@ public class MetaTask extends BaseEntity{
     @ApiModelProperty("是否自动领取")
     @ExcelProperty("是否自动领取")
     private boolean autoReceive;
+
+    @ApiModelProperty("频道id")
+    @ExcelProperty("频道id")
+    private Long metaPropId;
+
+    @ApiModelProperty("通道id")
+    @ExcelProperty("通道id")
+    @Searchable
+    private Long channelId;
 }

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

@@ -69,6 +69,11 @@ public class MetaTaskToUser extends BaseEntity {
     @Enumerated(EnumType.STRING)
     private MetaTaskStatus status;
 
+    @ApiModelProperty("频道id")
+    @ExcelProperty("频道id")
+    @Searchable
+    private Long channelId;
+
     @Transient
     @ApiModelProperty("进度")
     @ExcelIgnore

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

@@ -0,0 +1,21 @@
+package com.izouma.nineth.domain;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙游客id")
+public class MetaTourist extends BaseEntityNoID {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long userId;
+
+}

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

@@ -32,4 +32,8 @@ public class MetaUserGoldRecord extends BaseEntity {
     @ExcelProperty("操作后数量")
     private int afterNum;
 
+    @ApiModelProperty("备注")
+    @ExcelProperty("备注")
+    private String remark;
+
 }

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

@@ -0,0 +1,89 @@
+package com.izouma.nineth.domain;
+
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.enums.MetaPropType;
+import com.izouma.nineth.enums.MetaPropUsedType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Transient;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙玩家道具")
+@Builder
+public class MetaUserProp extends BaseEntity {
+
+    @ApiModelProperty("用户id")
+    @ExcelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("道具id")
+    @ExcelProperty("道具id")
+    private Long metaPropId;
+
+    @ApiModelProperty("名称")
+    @ExcelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("图片")
+    @ExcelProperty("图片")
+    private String pic;
+
+    @ApiModelProperty("介绍")
+    @ExcelProperty("介绍")
+    private String introduction;
+
+    @ApiModelProperty("道具类型")
+    @ExcelProperty("道具类型")
+    @Enumerated(EnumType.STRING)
+    private MetaPropType propType;
+
+    @ApiModelProperty("使用类型")
+    @ExcelProperty("使用类型")
+    @Enumerated(EnumType.STRING)
+    private MetaPropUsedType usedType;
+
+    @ApiModelProperty("是否可以直接使用")
+    @ExcelProperty("是否可以直接使用")
+    private boolean canUse;
+
+    @ApiModelProperty("数量")
+    @ExcelProperty("数量")
+    private int num;
+
+    @ApiModelProperty("道具是否使用 针对永久道具")
+    @ExcelProperty("道具是否使用 针对永久道具")
+    private boolean used;
+
+    @ApiModelProperty("有效时间")
+    @ExcelProperty("有效时间")
+    @Transient
+    private int effectiveTime;
+
+    public static MetaUserProp create(Long userId, MetaProp metaProp, int num) {
+        return MetaUserProp.builder()
+                .userId(userId)
+                .metaPropId(metaProp.getId())
+                .name(metaProp.getName())
+                .pic(metaProp.getPic())
+                .introduction(metaProp.getIntroduction())
+                .propType(metaProp.getPropType())
+                .usedType(metaProp.getUsedType())
+                .canUse(metaProp.isCanUse())
+                .num(num)
+                .used(false)
+                .effectiveTime(0)
+                .build();
+    }
+}

+ 72 - 0
src/main/java/com/izouma/nineth/domain/MetaUserPropRecord.java

@@ -0,0 +1,72 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.enums.MetaPropOperationType;
+import com.izouma.nineth.enums.MetaPropUsedType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Builder
+@ApiModel("元宇宙玩家道具记录")
+public class MetaUserPropRecord extends BaseEntity {
+
+    @ApiModelProperty("用户id")
+    @ExcelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("操作时间")
+    @ExcelProperty("操作时间")
+    private LocalDateTime operatingTime;
+
+    @ApiModelProperty("操作类型")
+    @ExcelProperty("操作类型")
+    @Enumerated(EnumType.STRING)
+    private MetaPropOperationType operationType;
+
+    @ApiModelProperty("道具id")
+    @ExcelProperty("道具id")
+    private Long metaPropId;
+
+    @ApiModelProperty("使用类型")
+    @ExcelProperty("使用类型")
+    @Enumerated(EnumType.STRING)
+    private MetaPropUsedType usedType;
+
+    @ApiModelProperty("名称")
+    @ExcelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("图片")
+    @ExcelProperty("图片")
+    private String pic;
+
+    @ApiModelProperty("操作道具数量")
+    @ExcelProperty("操作道具数量")
+    private int num;
+
+    public static MetaUserPropRecord create(Long userId, MetaProp metaProp, MetaPropOperationType operationType, int num) {
+        return MetaUserPropRecord.builder()
+                .userId(userId)
+                .metaPropId(metaProp.getId())
+                .name(metaProp.getName())
+                .pic(metaProp.getPic())
+                .operationType(operationType)
+                .operatingTime(LocalDateTime.now())
+                .usedType(metaProp.getUsedType())
+                .num(num)
+                .build();
+    }
+}

+ 26 - 0
src/main/java/com/izouma/nineth/domain/MetaUserTaskAwardReceivedRecord.java

@@ -0,0 +1,26 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙玩家任务奖励领取记录")
+public class MetaUserTaskAwardReceivedRecord extends BaseEntity {
+
+    @ApiModelProperty("用户id")
+    @ExcelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("任务id")
+    @ExcelProperty("任务id")
+    private Long metaTaskId;
+}

+ 44 - 16
src/main/java/com/izouma/nineth/domain/PublicScreenChat.java

@@ -2,7 +2,7 @@ package com.izouma.nineth.domain;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
-import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.enums.ChatType;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -10,6 +10,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 import javax.persistence.Transient;
 import java.time.LocalDateTime;
 
@@ -20,30 +22,28 @@ import java.time.LocalDateTime;
 @ApiModel("元宇宙用户聊天信息")
 public class PublicScreenChat extends BaseEntity {
 
-    @ApiModelProperty("发送方昵称")
-    @ExcelProperty("发送方昵称")
-    @Searchable
+    @ApiModelProperty("消息发送方昵称")
+    @ExcelProperty("消息发送方昵称")
     private String nickname;
 
-    @ApiModelProperty("发送方用户id")
-    @ExcelProperty("发送方用户id")
-    @Searchable
+    @ApiModelProperty("消息发送方用户id")
+    @ExcelProperty("消息发送方用户id")
     private String userId;
 
-    @ApiModelProperty("勋章等级")
-    @ExcelProperty("勋章等级")
+    @ApiModelProperty("消息发送方勋章等级")
+    @ExcelProperty("消息发放送勋章等级")
     private int level;
 
-    @ApiModelProperty("境界")
-    @ExcelProperty("境界")
+    @ApiModelProperty("消息发送方境界")
+    @ExcelProperty("消息发送方境界")
     private String realm;
 
-    @ApiModelProperty("头衔")
-    @ExcelProperty("头衔")
+    @ApiModelProperty("消息发送方头衔")
+    @ExcelProperty("消息发送方头衔")
     private String title;
 
-    @ApiModelProperty("头像")
-    @ExcelProperty("头像")
+    @ApiModelProperty("消息发送方头像")
+    @ExcelProperty("消息发送方头像")
     private String avatar;
 
     @ApiModelProperty("消息内容")
@@ -62,7 +62,7 @@ public class PublicScreenChat extends BaseEntity {
     @ExcelIgnore
     private int recall;
 
-    @ApiModelProperty("类型 1:直播 2:元宇宙聊天")
+    @ApiModelProperty("类型 1:元宇宙聊天 2:直播")
     @ExcelIgnore
     private int type;
 
@@ -72,4 +72,32 @@ public class PublicScreenChat extends BaseEntity {
 
     @Transient
     private boolean myself;
+
+    @ApiModelProperty("消息类型")
+    @Enumerated(EnumType.STRING)
+    private ChatType chatType;
+
+    @ApiModelProperty("消息接受方昵称")
+    @ExcelProperty("消息接受方昵称")
+    private String toUserNickname;
+
+    @ApiModelProperty("消息接收方用户id")
+    @ExcelProperty("消息接收方用户id")
+    private Long toUserId;
+
+    @ApiModelProperty("消息接收方勋章等级")
+    @ExcelProperty("消息接收方勋章等级")
+    private int toUserLevel;
+
+    @ApiModelProperty("消息接收方境界")
+    @ExcelProperty("消息接收方境界")
+    private String toUserRealm;
+
+    @ApiModelProperty("消息接收方头衔")
+    @ExcelProperty("消息接收方头衔")
+    private String toUserTitle;
+
+    @ApiModelProperty("消息接收方头像")
+    @ExcelProperty("消息接收方头像")
+    private String toUserAvatar;
 }

+ 27 - 0
src/main/java/com/izouma/nineth/domain/RaexSnapshot.java

@@ -0,0 +1,27 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("绿洲快照")
+public class RaexSnapshot extends BaseEntity {
+
+    @ApiModelProperty("快照名称")
+    @ExcelIgnore
+    private String name;
+
+    @ApiModelProperty("快照规则")
+    @ExcelIgnore
+    private String rule;
+
+}

+ 0 - 16
src/main/java/com/izouma/nineth/domain/Snapshot.java

@@ -30,20 +30,4 @@ public class Snapshot extends BaseEntity {
     @ExcelIgnore
     @Enumerated(EnumType.STRING)
     private OperationSource source;
-
-    @ExcelProperty("用户id")
-    @Transient
-    private Long userId;
-
-    @ExcelProperty("用户名称")
-    @Transient
-    private String nickName;
-
-    @ExcelProperty("用户手机号")
-    @Transient
-    private String phone;
-
-    @ExcelProperty("持有数量")
-    @Transient
-    private Long countNum;
 }

+ 0 - 29
src/main/java/com/izouma/nineth/dto/MMOMessage.java

@@ -1,29 +0,0 @@
-package com.izouma.nineth.dto;
-
-import com.izouma.nineth.domain.MetaMMOLoginInfo;
-import io.swagger.annotations.ApiModel;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@ApiModel("单个消息")
-public class MMOMessage {
-
-    /**
-     * 1.地图玩家信息
-     * 2.移动
-     * 3.下线
-     * 4.玩家加入
-     * 5.自生位置信息
-     */
-    private Integer messageType;
-
-    private MetaMMOLoginInfo message;
-
-    private List<MetaMMOLoginInfo> map;
-}

+ 0 - 20
src/main/java/com/izouma/nineth/dto/MMOSingleMessage.java

@@ -1,20 +0,0 @@
-package com.izouma.nineth.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@ApiModel("单个消息")
-public class MMOSingleMessage {
-
-    @ApiModelProperty("消息类型")
-    private Integer messageType;
-
-    @ApiModelProperty("消息体")
-    private String message;
-}

+ 25 - 0
src/main/java/com/izouma/nineth/dto/MetaAwardReceiveDTO.java

@@ -0,0 +1,25 @@
+package com.izouma.nineth.dto;
+
+import com.izouma.nineth.enums.MetaAwardTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MetaAwardReceiveDTO {
+
+    @ApiModelProperty("奖励类型")
+    private MetaAwardTypeEnum awardType;
+
+    @ApiModelProperty("奖励配置(金币奖励为金币数量,NFT奖励为NFT奖励图片地址)")
+    private String config;
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("备注")
+    private String remark;
+}

+ 44 - 0
src/main/java/com/izouma/nineth/dto/MetaBagAssetDTO.java

@@ -0,0 +1,44 @@
+package com.izouma.nineth.dto;
+
+import com.izouma.nineth.converter.FileObjectListConverter;
+import com.izouma.nineth.domain.Asset;
+import com.izouma.nineth.domain.FileObject;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Convert;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class MetaBagAssetDTO {
+
+    @ApiModelProperty("藏品id")
+    private Long id;
+
+    @ApiModelProperty("藏品名称")
+    private String name;
+
+    @ApiModelProperty("藏品图片")
+    @Convert(converter = FileObjectListConverter.class)
+    private List<FileObject> pic;
+
+    @ApiModelProperty("是否可以直接使用")
+    private boolean canUse;
+
+    private Long collectionId;
+
+    public static MetaBagAssetDTO create(Asset asset) {
+        return MetaBagAssetDTO.builder()
+                .id(asset.getId())
+                .name(asset.getName())
+                .pic(asset.getPic())
+                .collectionId(asset.getCollectionId())
+                .build();
+    }
+}

+ 12 - 0
src/main/java/com/izouma/nineth/dto/MetaTouristDTO.java

@@ -0,0 +1,12 @@
+package com.izouma.nineth.dto;
+
+import lombok.Data;
+
+@Data
+public class MetaTouristDTO {
+
+    private Long userId;
+
+    private String nickName;
+
+}

+ 18 - 0
src/main/java/com/izouma/nineth/dto/MetaUserBagDTO.java

@@ -0,0 +1,18 @@
+package com.izouma.nineth.dto;
+
+import com.izouma.nineth.domain.MetaUserProp;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class MetaUserBagDTO {
+
+    private List<MetaBagAssetDTO> metaBagAssetDTOS;
+
+    private List<MetaUserProp> metaUserProps;
+}

+ 2 - 5
src/main/java/com/izouma/nineth/dto/SnapshotDTO.java

@@ -6,9 +6,6 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
@@ -16,7 +13,7 @@ import javax.persistence.Id;
 public class SnapshotDTO {
 
     @ExcelProperty("用户id")
-    private String userId;
+    private Long userId;
 
     @ExcelProperty("用户名称")
     private String nickName;
@@ -25,5 +22,5 @@ public class SnapshotDTO {
     private String phone;
 
     @ExcelProperty("持有数量")
-    private String countNum;
+    private Long countNum;
 }

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

@@ -0,0 +1,20 @@
+package com.izouma.nineth.enums;
+
+public enum ChatType {
+
+    DEFAULT("默认"),
+
+    PUBLIC("公频聊天"),
+
+    PRIVATE("私聊");
+
+    private final String description;
+
+    ChatType(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+}

+ 10 - 5
src/main/java/com/izouma/nineth/enums/EntryModeType.java

@@ -1,15 +1,20 @@
 package com.izouma.nineth.enums;
 
-import io.swagger.annotations.ApiModel;
-
-@ApiModel("元宇宙游戏入场方式枚举")
 public enum EntryModeType {
 
+    GOLD("金币"),
+
     NFT("NFT"),
 
-    GOLD("金币"),
+    META_PROP("元宇宙道具"),
+
+    GOLD_OR_NFT("金币或NFT"),
+
+    GOLD_OR_META_PROP("金币或道具"),
+
+    NFT_OR_META_PROP("NFT或道具"),
 
-    GOLD_OR_NFT("金币或NFT");
+    GOLD_OR_NFT_OR_META_PROP("金币或NFT或道具");
 
     private final String description;
 

+ 3 - 3
src/main/java/com/izouma/nineth/enums/MetaAwardTypeEnum.java

@@ -7,11 +7,11 @@ public enum MetaAwardTypeEnum {
 
     NULL("空"),
 
-    ACCESSORIES("配饰"),
-
     NFT("NFT"),
 
-    GOLD("金币");
+    GOLD("金币"),
+
+    META_PROP("元宇宙道具");
 
     private final String description;
 

+ 21 - 0
src/main/java/com/izouma/nineth/enums/MetaPropOperationType.java

@@ -0,0 +1,21 @@
+package com.izouma.nineth.enums;
+
+
+public enum MetaPropOperationType {
+
+    RECEIVE("领取/获得"),
+
+    USE("使用"),
+
+    CANCEL_USE("取消使用");
+
+    private final String description;
+
+    MetaPropOperationType(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+}

+ 5 - 7
src/main/java/com/izouma/nineth/enums/MetaPointTypeEnum.java → src/main/java/com/izouma/nineth/enums/MetaPropTriggerType.java

@@ -1,20 +1,18 @@
 package com.izouma.nineth.enums;
 
+public enum MetaPropTriggerType {
 
-public enum MetaPointTypeEnum {
+    ACTIVE("主动"),
 
-    GAME_BOX("GAME_BOX"),
-
-    ZOMBIE("ZOMBIE");
+    PASSIVE("被动");
 
     private final String description;
 
-    MetaPointTypeEnum(String description) {
+    MetaPropTriggerType(String description) {
         this.description = description;
     }
 
     public String getDescription() {
         return description;
     }
-}
-
+}

+ 26 - 0
src/main/java/com/izouma/nineth/enums/MetaPropType.java

@@ -0,0 +1,26 @@
+package com.izouma.nineth.enums;
+
+public enum MetaPropType {
+
+    ACCESSORIES("配饰"),
+
+    VEHICLE("载具"),
+
+    MATERIAL("材料"),
+
+    EXPERIENCE("体验卡"),
+
+    PETS("宠物"),
+
+    OTHER("其他");
+
+    private final String description;
+
+    MetaPropType(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+}

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

@@ -0,0 +1,20 @@
+package com.izouma.nineth.enums;
+
+public enum MetaPropUsedType {
+
+    PERMANENT("永久"),
+
+    DISPOSABLE("一次性"),
+
+    LIMITED("限时");
+
+    private final String description;
+
+    MetaPropUsedType(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+}

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

@@ -0,0 +1,19 @@
+package com.izouma.nineth.enums;
+
+
+public enum MetaSwitchType {
+
+    WEBSOCKET("websocket开关"),
+
+    COMMON("普通开关");
+
+    private final String description;
+
+    MetaSwitchType(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+}

+ 0 - 2
src/main/java/com/izouma/nineth/enums/MetaTaskStatus.java

@@ -2,8 +2,6 @@ package com.izouma.nineth.enums;
 
 public enum MetaTaskStatus {
 
-    GET("领取"),
-
     PROGRESS("进行中"),
 
     COMPLETION("已完成"),

+ 3 - 3
src/main/java/com/izouma/nineth/enums/MetaTaskType.java

@@ -3,9 +3,9 @@ package com.izouma.nineth.enums;
 
 public enum MetaTaskType {
 
-    SIGN_IN_SINGLE_DAY("单日签到"),
-
-    SIGN_IN_CONTINUOUS("连续多日签到"),
+//    SIGN_IN_SINGLE_DAY("单日签到"),
+//
+//    SIGN_IN_CONTINUOUS("连续多日签到"),
 
     COLLECT_COLLECTION("收集藏品"),
 

+ 1 - 1
src/main/java/com/izouma/nineth/listener/RegisterListener.java

@@ -40,7 +40,7 @@ public class RegisterListener implements RocketMQListener<RegisterEvent> {
             User user = userService.phoneRegister(registerEvent.getPhone(), registerEvent.getCode(),
                     registerEvent.getPassword(), registerEvent.getInviteCode(),
                     registerEvent.getInvitor(), registerEvent.getCollectionId(),
-                    registerEvent.getShowroomId(), InviteType.NORMAL);
+                    registerEvent.getShowroomId(), InviteType.NORMAL, null);
             map.put("status", "success");
             map.put("data", user);
             map.put("token", jwtTokenUtil.generateToken(JwtUserFactory.create(user)));

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

@@ -4,7 +4,6 @@ import com.izouma.nineth.domain.Asset;
 import com.izouma.nineth.dto.FuAssetDTO;
 import com.izouma.nineth.enums.AssetSource;
 import com.izouma.nineth.enums.AssetStatus;
-import com.izouma.nineth.enums.CollectionSource;
 import com.izouma.nineth.enums.CollectionType;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -43,6 +42,8 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
 
     List<Asset> findByTokenIdOrderByCreatedAt(String tokenId);
 
+    List<Asset> findAllByUserIdAndCompanyIdAndStatusIn(Long userId, Long companyId, List<AssetStatus> status);
+
     List<Asset> findByOrderId(Long orderId);
 
     Page<Asset> findByUserIdAndStatusAndCompanyIdAndNameLikeAndConsignment(Long userId, AssetStatus status, Long companyId, String name, Pageable pageable, Boolean consignment);
@@ -116,7 +117,7 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
     @Query(nativeQuery = true, value = "SELECT * FROM (SELECT asset.user_id userId,user.nickname nickname,user.username username,user.avatar avatar,asset.name,asset.prefix_name prefixName,count(*) num FROM asset left join user on asset.user_id = user.id where asset.user_id not in (1435297,4273750, 56302, 7209) and asset.status in ('NORMAL','TRADING','GIFTING','MINTING','AUCTIONING') and asset.company_id = 1 GROUP BY asset.user_id) a WHERE a.num > 10")
     List<Map<String, String>> findAllUserHold();
 
-    List<Asset> findAllByUserIdAndStatusIn(Long userId, List<AssetStatus> status);
+    List<Asset> findAllByUserIdAndDelAndStatusIn(Long userId, boolean del, List<AssetStatus> status);
 
     @Query("select a from Asset a where a.status in ?2 and a.userId = ?1 and a.name like ?3 and a.type in (com.izouma.nineth.enums.CollectionType.DEFAULT,com.izouma.nineth.enums.CollectionType.BLIND_BOX)")
     List<Asset> findAllByUserIdAndStatusInAndNameLike(Long userId, List<AssetStatus> status, String name);
@@ -144,7 +145,7 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
     @Query("select count(id) from Asset where status = ?2 and name like ?1")
     Long countDestroyed(String name, AssetStatus status);
 
-    @Query("select count(id) from Asset where name like ?1 and status = 'NORMAL' and ownerId <> 1435297")
+    @Query("select count(id) from Asset where name like ?1 and status in ('NORMAL','TRADING','GIFTING','MINTING','AUCTIONING','AUCTION_TRADING','DESTROYING') and ownerId <> 1435297")
     Long countNameLikeNotDestroyed(String name);
 
     @Query(value = "SELECT count(a.id) from asset a where a.name LIKE ?1 and status = 'NORMAL' and owner_id = ?2", nativeQuery = true)

+ 4 - 0
src/main/java/com/izouma/nineth/repo/BannerRepo.java

@@ -1,16 +1,20 @@
 package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.Banner;
+import com.izouma.nineth.enums.BannerType;
 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 BannerRepo extends JpaRepository<Banner, Long>, JpaSpecificationExecutor<Banner> {
     @Query("update Banner t set t.del = true where t.id = ?1")
     @Modifying
     @Transactional
     void softDelete(Long id);
+
+    List<Banner> findByLinkContentAndTypeAndDel(String linkContent, BannerType type, boolean del);
 }

+ 3 - 2
src/main/java/com/izouma/nineth/repo/MetaAdvertRecordRepo.java

@@ -15,7 +15,8 @@ public interface MetaAdvertRecordRepo extends JpaRepository<MetaAdvertRecord, Lo
     @Transactional
     void softDelete(Long id);
 
-    MetaAdvertRecord findByApplicationAndPublishAndDel(int application, boolean publish, boolean del);
+    List<MetaAdvertRecord> findByDel(boolean del);
 
-    List<MetaAdvertRecord> findByPublishAndDel(boolean used, boolean del);
+    @Query("select max(m.number) from MetaAdvertRecord m ")
+    Integer findMaxNumber();
 }

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

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

+ 10 - 0
src/main/java/com/izouma/nineth/repo/MetaFeedBackRepo.java

@@ -0,0 +1,10 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaFeedBack;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MetaFeedBackRepo extends JpaRepository<MetaFeedBack, Long>, JpaSpecificationExecutor<MetaFeedBack> {
+
+
+}

+ 3 - 4
src/main/java/com/izouma/nineth/repo/MetaGameBoxPointsRepo.java

@@ -1,7 +1,6 @@
 package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.MetaGameBoxPoints;
-import com.izouma.nineth.enums.MetaPointTypeEnum;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
@@ -12,11 +11,11 @@ import java.util.Map;
 public interface MetaGameBoxPointsRepo extends JpaRepository<MetaGameBoxPoints, Long>, JpaSpecificationExecutor<MetaGameBoxPoints> {
 
     @Query(value = "SELECT m.user_id userId, m.score score, m.type type, u.nickname nickname, u.avatar head, RANK() OVER(ORDER BY m.score DESC) scoreRank FROM meta_game_box_points m LEFT JOIN user u ON m.user_id = u.id where m.type = ?1 LIMIT 50", nativeQuery = true)
-    List<Map<String, Object>> findTopFiftyByType(String type);
+    List<Map<String, Object>> findTopFiftyByType(int type);
 
     @Query(value = "SELECT m.score score, a.scoreRank scoreRank FROM meta_game_box_points m LEFT JOIN ( SELECT user_id userId, RANK() OVER ( ORDER BY score DESC ) scoreRank FROM meta_game_box_points where type = ?2 ) a ON m.user_id = a.userId  WHERE m.user_id = ?1 and m.type = ?2", nativeQuery = true)
-    Map<String, Object> findInfoByUserIdAndType(Long userId, String type);
+    Map<String, Object> findInfoByUserIdAndType(Long userId, int type);
 
-    MetaGameBoxPoints findByUserIdAndType(Long userId, MetaPointTypeEnum type);
+    MetaGameBoxPoints findByUserIdAndType(Long userId, int type);
 
 }

+ 18 - 0
src/main/java/com/izouma/nineth/repo/MetaLuckyDrawAwardReceiveRecordRepo.java

@@ -0,0 +1,18 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaLuckyDrawAwardReceiveRecord;
+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 MetaLuckyDrawAwardReceiveRecordRepo extends JpaRepository<MetaLuckyDrawAwardReceiveRecord, Long>, JpaSpecificationExecutor<MetaLuckyDrawAwardReceiveRecord> {
+    @Query("update MetaLuckyDrawAwardReceiveRecord t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    Integer countByMetaLuckyDrawIdAndMetaLuckDrawAwardName(Long metaLuckyDrawId, String metaLuckDrawAwardName);
+}

+ 18 - 0
src/main/java/com/izouma/nineth/repo/MetaLuckyDrawRepo.java

@@ -0,0 +1,18 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaLuckyDraw;
+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 MetaLuckyDrawRepo extends JpaRepository<MetaLuckyDraw, Long>, JpaSpecificationExecutor<MetaLuckyDraw> {
+    @Query("update MetaLuckyDraw t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    MetaLuckyDraw findByNameAndDel(String name, boolean del);
+}

+ 0 - 5
src/main/java/com/izouma/nineth/repo/MetaMMOLoginInfoRepo.java

@@ -3,12 +3,7 @@ package com.izouma.nineth.repo;
 import com.izouma.nineth.domain.MetaMMOLoginInfo;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
 
 public interface MetaMMOLoginInfoRepo extends JpaRepository<MetaMMOLoginInfo, Long>, JpaSpecificationExecutor<MetaMMOLoginInfo> {
 
-    @Query(value = "select * from meta_mmo_login_info a where a.user_id = ?1 order by a.created_at desc limit 1",nativeQuery = true)
-    MetaMMOLoginInfo findLastByUserId(Long userId);
-
-    MetaMMOLoginInfo findByUserIdAndSessionIdAndDel(Long userId, String sessionId, boolean del);
 }

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

@@ -0,0 +1,21 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaParamsConfig;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+import javax.annotation.Nonnull;
+import java.util.Optional;
+
+public interface MetaParamsConfigRepo extends JpaRepository<MetaParamsConfig, String>, JpaSpecificationExecutor<MetaParamsConfig> {
+
+    @Cacheable("metaParamsConfig")
+    Optional<MetaParamsConfig> findByName(String name);
+
+    @Override
+    @CachePut(value = "metaParamsConfig", key = "#record.name")
+    @Nonnull
+    MetaParamsConfig save(@Nonnull MetaParamsConfig record);
+}

+ 19 - 0
src/main/java/com/izouma/nineth/repo/MetaPropRepo.java

@@ -0,0 +1,19 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaProp;
+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 MetaPropRepo extends JpaRepository<MetaProp, Long>, JpaSpecificationExecutor<MetaProp> {
+    @Query("update MetaProp t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    List<MetaProp> findAllByDel(boolean del);
+}

+ 20 - 0
src/main/java/com/izouma/nineth/repo/MetaResourcesRepo.java

@@ -0,0 +1,20 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaResources;
+import com.izouma.nineth.dto.MetaRestResult;
+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.naming.Name;
+import javax.transaction.Transactional;
+
+public interface MetaResourcesRepo extends JpaRepository<MetaResources, Long>, JpaSpecificationExecutor<MetaResources> {
+    @Query("update MetaResources t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    MetaResources findByNameAndDel(String name, boolean del);
+}

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

@@ -16,7 +16,7 @@ public interface MetaSignAwardRepo extends JpaRepository<MetaSignAward, Long>, J
     @Transactional
     void softDelete(Long id);
 
-    MetaSignAward findByDateAndSignNumAndDel(String date, int signNum, boolean del);
+    MetaSignAward findByDateAndChannelIdAndSignNumAndDel(String date, Long channelId, int signNum, boolean del);
 
-    List<MetaSignAward> findByDateAndDel(String date, boolean del);
+    List<MetaSignAward> findByDateAndChannelIdAndDel(String date, Long channelId, boolean del);
 }

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

@@ -17,8 +17,8 @@ public interface MetaSignRecordRepo extends JpaRepository<MetaSignRecord, Long>,
     @Transactional
     void softDelete(Long id);
 
-    MetaSignRecord findByUserIdAndSignTimeAndDel(Long userId, LocalDate signTime, boolean del);
+    MetaSignRecord findByUserIdAndChannelIdAndSignTimeAndDel(Long userId, Long channelId, LocalDate signTime, boolean del);
 
-    @Query("SELECT m.signTime FROM MetaSignRecord m WHERE m.signTime >= ?1 AND m.signTime <= ?2 AND m.userId = ?3 ORDER BY m.signTime")
-    List<LocalDate> findSigns(LocalDate firstDay, LocalDate lastDay, Long userId);
+    @Query("SELECT m.signTime FROM MetaSignRecord m WHERE m.signTime >= ?1 AND m.signTime <= ?2 AND m.userId = ?3 AND m.channelId = ?4 ORDER BY m.signTime")
+    List<LocalDate> findSigns(LocalDate firstDay, LocalDate lastDay, Long userId, Long channelId);
 }

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

@@ -15,5 +15,5 @@ public interface MetaSignRepo extends JpaRepository<MetaSign, Long>, JpaSpecific
     @Transactional
     void softDelete(Long id);
 
-    MetaSign findByDateAndDel(String date, boolean del);
+    MetaSign findByDateAndChannelIdAndDel(String date, Long channelId, boolean del);
 }

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

@@ -1,6 +1,7 @@
 package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.MetaSwitch;
+import com.izouma.nineth.enums.MetaSwitchType;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
@@ -15,7 +16,7 @@ public interface MetaSwitchRepo extends JpaRepository<MetaSwitch, Long>, JpaSpec
     @Transactional
     void softDelete(Long id);
 
-    MetaSwitch findByNameAndDel(String name, boolean del);
+    MetaSwitch findByNameAndSwitchTypeAndDel(String name, MetaSwitchType switchType, boolean del);
 
     @Query("update MetaSwitch t set t.status = ?2 where t.id = ?1")
     @Modifying

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

@@ -19,6 +19,6 @@ public interface MetaTaskRepo extends JpaRepository<MetaTask, Long>, JpaSpecific
 
     List<MetaTask> findAllByPublishAndDelAndFinish(boolean publish, boolean del, boolean finish);
 
-    @Query(value = "select * from meta_task where finish = false and del = false and publish = true and id not in (select task_id from meta_task_to_user where user_id = ?1)", nativeQuery = true)
-    List<MetaTask> canGet(Long userId);
+    @Query(value = "select * from meta_task where finish = false and del = false and publish = true and channel_id = ?2 and id not in (select task_id from meta_task_to_user where user_id = ?1)", nativeQuery = true)
+    List<MetaTask> canGet(Long userId, Long channelId);
 }

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

@@ -9,7 +9,9 @@ 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;
+import java.util.Map;
 
 public interface MetaTaskToUserRepo extends JpaRepository<MetaTaskToUser, Long>, JpaSpecificationExecutor<MetaTaskToUser> {
 
@@ -17,10 +19,16 @@ public interface MetaTaskToUserRepo extends JpaRepository<MetaTaskToUser, Long>,
 
     MetaTaskToUser findByIdAndDel(Long id, boolean del);
 
-    List<MetaTaskToUser> findAllByUserIdAndStatusAndDel(Long userId, MetaTaskStatus status, boolean del);
+    List<MetaTaskToUser> findAllByUserIdAndChannelIdAndStatusAndDel(Long userId, Long channelId, MetaTaskStatus status, boolean del);
 
     @Modifying
     @Transactional
     @Query(value = "update MetaTaskToUser a set a.status = 'FINISH' where a.taskId = ?1 and a.del = false ")
     void finish(Long taskId);
+
+    @Query(value = " SELECT m.user_id as userId," +
+            "u.nickname as nickName," +
+            "u.phone as phone FROM meta_task_to_user m LEFT JOIN USER u ON m.user_id = u.id WHERE m.task_id = ?1 AND m.STATUS = 'FINISH' AND m.del = FALSE AND m.finish_time <= ?2 AND m.user_id NOT IN ( SELECT user_id FROM meta_task_to_user WHERE task_id = ?1 AND STATUS = 'FINISH' AND del = FALSE AND finish_time <= ?3 ) GROUP BY m.user_id"
+            , nativeQuery = true)
+    List<Map<String, Object>> snapshot(Long taskId, LocalDateTime createdAt, LocalDateTime lastCreatedAt);
 }

+ 9 - 0
src/main/java/com/izouma/nineth/repo/MetaTouristRepo.java

@@ -0,0 +1,9 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaTourist;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MetaTouristRepo extends JpaRepository<MetaTourist, Long>, JpaSpecificationExecutor<MetaTourist> {
+
+}

+ 9 - 0
src/main/java/com/izouma/nineth/repo/MetaUserPropRecordRepo.java

@@ -0,0 +1,9 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaUserPropRecord;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MetaUserPropRecordRepo extends JpaRepository<MetaUserPropRecord, Long>, JpaSpecificationExecutor<MetaUserPropRecord> {
+
+}

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

@@ -0,0 +1,23 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaUserProp;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface MetaUserPropRepo extends JpaRepository<MetaUserProp, Long>, JpaSpecificationExecutor<MetaUserProp> {
+
+    MetaUserProp findByUserIdAndMetaPropIdAndDel(Long userId, Long metaPropId, boolean del);
+
+    void deleteByUserIdAndMetaPropId(Long userId, Long metaPropId);
+
+    List<MetaUserProp> findByUserIdAndDel(Long userId, boolean del);
+
+    MetaUserProp findByMetaPropIdAndDel(Long metaPropId, boolean del);
+
+    @Query("DELETE FROM MetaUserProp m WHERE m.num < 1")
+    void deleteNumZero();
+
+}

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

@@ -0,0 +1,15 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaUserTaskAwardReceivedRecord;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+import java.time.LocalDateTime;
+
+public interface MetaUserTaskAwardReceivedRecordRepo extends JpaRepository<MetaUserTaskAwardReceivedRecord, Long>, JpaSpecificationExecutor<MetaUserTaskAwardReceivedRecord> {
+
+    MetaUserTaskAwardReceivedRecord findByUserIdAndMetaTaskIdAndDel(Long userId, Long metaTaskId, boolean del);
+
+    MetaUserTaskAwardReceivedRecord findByUserIdAndMetaTaskIdAndDelAndCreatedAtAfter(Long userId, Long metaTaskId, boolean del, LocalDateTime createdAt);
+
+}

+ 33 - 0
src/main/java/com/izouma/nineth/repo/RaexSnapshotRepo.java

@@ -0,0 +1,33 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.RaexSnapshot;
+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;
+import java.util.Map;
+
+public interface RaexSnapshotRepo extends JpaRepository<RaexSnapshot, Long>, JpaSpecificationExecutor<RaexSnapshot> {
+    @Query("update RaexSnapshot t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    @Query(value = "select user.id userId, user.nickname nickName, phone phone, count(user_id) countNum " +
+            "from user " +
+            "         inner join asset on user.id = asset.user_id " +
+            "where asset.name like ?1 " +
+            " and asset.company_id = 1" +
+            " and (asset.category = '收藏品' or asset.category = '元域名')" +
+            "  and ((asset.created_at < ?2 " +
+            "    and asset.status in ('NORMAL', 'TRADING', 'GIFTING', 'MINTING', 'AUCTIONING')) " +
+            "    or (" +
+            "               asset.created_at < ?2 and asset.modified_at > ?2 " +
+            "               and asset.status in ('TRANSFERRED', 'GIFTED', 'AUCTIONED', 'DESTROYED'))) " +
+            "group by asset.user_id " +
+            "order by count(user_id) desc", nativeQuery = true)
+    List<Map<String, Object>> shot(String name, String time);
+}

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

@@ -17,7 +17,7 @@ public interface UserDetailRepo extends JpaRepository<UserDetail, Long>, JpaSpec
     @Query("select count(a) from Asset a where a.userId = ?1 and a.status = 'NORMAL'")
     Long findNftCountById(Long id);
 
-    @Query("select count(a) from Asset a where a.userId = ?1 and a.status = 'NORMAL' and a.name like '%房产%' or a.name like '%建筑%'")
+    @Query("select count(a) from Asset a where a.userId = ?1 and a.status = 'NORMAL' and (a.name like '%房产%' or a.name like '%建筑%')")
     Long findBuildCountById(Long id);
 
     @Query("select count(a) from Asset a where a.userId = ?1 and a.status = 'NORMAL' and a.name like '%土地%'")

+ 1 - 0
src/main/java/com/izouma/nineth/security/WebSecurityConfig.java

@@ -176,6 +176,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/tradeAuctionOrder/all").permitAll()
                 .antMatchers("/metaVisitor/save").permitAll()
                 .antMatchers("/gpt3/**").permitAll()
+                .antMatchers("/metaSwitch/*/findSwitch").permitAll()
                 // all other requests need to be authenticated
                 .anyRequest().authenticated().and()
                 // make sure we use stateless session; session won't be used to

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

@@ -64,7 +64,7 @@ public class MetaAccessoriesService {
         if (total > restResultForNum.getData()) {
             return MetaRestResult.returnError(String.format("金币不足:当前配饰总共需要金币[%S]个,当前用户剩余金币[%S]个", total, restResultForNum.getData()));
         }
-        MetaRestResult<MetaUserGold> restResult = metaUserGoldService.changeNum(userId, -total);
+        MetaRestResult<MetaUserGold> restResult = metaUserGoldService.changeNum(userId, -total, String.format("玩家[%S]购买配饰[%S],支出[%S]个金币", userId, metaAccessoriesIds, total));
         if (Constants.MetaRestCode.success != restResult.getCode()) {
             return MetaRestResult.returnError(restResult.getMessage());
         }

+ 26 - 0
src/main/java/com/izouma/nineth/service/MetaAdvertRecordService.java

@@ -1,13 +1,19 @@
 package com.izouma.nineth.service;
 
+import com.izouma.nineth.annotations.RedisLock;
 import com.izouma.nineth.domain.MetaAdvertRecord;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MetaAdvertRecordRepo;
 import com.izouma.nineth.utils.JpaUtils;
+import com.izouma.nineth.utils.ObjUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
 @Service
 @AllArgsConstructor
 public class MetaAdvertRecordService {
@@ -17,4 +23,24 @@ public class MetaAdvertRecordService {
     public Page<MetaAdvertRecord> all(PageQuery pageQuery) {
         return metaAdvertRecordRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaAdvertRecord.class), JpaUtils.toPageRequest(pageQuery));
     }
+
+    public MetaAdvertRecord save(MetaAdvertRecord record) {
+        if (record.getId() != null) {
+            MetaAdvertRecord orig = metaAdvertRecordRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            return metaAdvertRecordRepo.save(orig);
+        }
+        int maxNumber = findMaxNumber();
+        record.setNumber(maxNumber + 1);
+        return metaAdvertRecordRepo.save(record);
+    }
+
+    @RedisLock(value = "'maxNumber'", expire = 1, unit = TimeUnit.HOURS)
+    private int findMaxNumber() {
+        Integer maxNumber = metaAdvertRecordRepo.findMaxNumber();
+        if (Objects.isNull(maxNumber)) {
+            return 0;
+        }
+        return maxNumber;
+    }
 }

+ 92 - 0
src/main/java/com/izouma/nineth/service/MetaAwardReceiveService.java

@@ -0,0 +1,92 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.config.Constants;
+import com.izouma.nineth.domain.MetaUserGold;
+import com.izouma.nineth.domain.MetaUserProp;
+import com.izouma.nineth.dto.MetaAwardReceiveDTO;
+import com.izouma.nineth.dto.MetaRestResult;
+import com.izouma.nineth.dto.MetaServiceResult;
+import com.izouma.nineth.enums.MetaAwardTypeEnum;
+import com.izouma.nineth.enums.MetaPropOperationType;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.Objects;
+
+@Service
+@AllArgsConstructor
+public class MetaAwardReceiveService {
+
+    private MetaUserGoldService metaUserGoldService;
+
+    private MetaUserPropService metaUserPropService;
+
+    @Transactional
+    public MetaServiceResult receive(MetaAwardReceiveDTO metaAwardReceiveDTO) {
+        switch (metaAwardReceiveDTO.getAwardType()) {
+            case NULL:
+                return MetaServiceResult.returnSuccess("奖励类型为空");
+            case GOLD:
+                if (StringUtils.isBlank(metaAwardReceiveDTO.getConfig())) {
+                    return MetaServiceResult.returnError("金币奖励未配置金币数量");
+                }
+                MetaRestResult<MetaUserGold> restResult;
+                try {
+                    int num = Integer.parseInt(metaAwardReceiveDTO.getConfig());
+                    restResult = metaUserGoldService.changeNum(metaAwardReceiveDTO.getUserId(), num, String.format("玩家[%S]通过[%S]获得[%S]个金币", metaAwardReceiveDTO.getUserId(), metaAwardReceiveDTO.getRemark(), num));
+                } catch (Exception e) {
+                    return MetaServiceResult.returnError(String.format("金币奖励领取发生异常[%S]", e.getMessage()));
+                }
+                if (Constants.MetaRestCode.success != restResult.getCode()) {
+                    return MetaServiceResult.returnError(restResult.getMessage());
+                }
+                return MetaServiceResult.returnSuccess("金币奖励领取成功,已自动加入金币余额");
+            case META_PROP:
+                if (StringUtils.isBlank(metaAwardReceiveDTO.getConfig())) {
+                    return MetaServiceResult.returnError("道具id不能为空");
+                }
+                MetaRestResult<MetaUserProp> operate;
+                try {
+                    Long metaPropId = Long.parseLong(metaAwardReceiveDTO.getConfig());
+                    operate = metaUserPropService.operate(metaAwardReceiveDTO.getUserId(), metaPropId, MetaPropOperationType.RECEIVE, 1);
+                } catch (Exception e) {
+                    return MetaServiceResult.returnError(String.format("道具奖励领取发生异常[%S]", e.getMessage()));
+                }
+                if (Constants.MetaRestCode.success != operate.getCode()) {
+                    return MetaServiceResult.returnError(operate.getMessage());
+                }
+                return MetaServiceResult.returnSuccess(operate.getMessage());
+            case NFT:
+                return MetaServiceResult.returnSuccess("NFT奖励领取成功,将在指定时间统一发放给用户");
+            default:
+                return MetaServiceResult.returnError("不存在的奖励类型");
+        }
+    }
+
+    public MetaServiceResult buildAwardConfig(MetaAwardReceiveDTO metaAwardReceiveDTO, Long metaPropId, int goldNum) {
+        if (Objects.isNull(metaAwardReceiveDTO)) {
+            return MetaServiceResult.returnError("构建奖励模型异常:奖励模型不能为空");
+        }
+        if (Objects.isNull(metaAwardReceiveDTO.getUserId())) {
+            return MetaServiceResult.returnError("构建奖励模型异常:用户id不能为空");
+        }
+        if (Objects.isNull(metaAwardReceiveDTO.getAwardType())) {
+            return MetaServiceResult.returnError("构建奖励模型异常:奖励类型不能为空");
+        }
+        if (MetaAwardTypeEnum.GOLD.equals(metaAwardReceiveDTO.getAwardType())) {
+            if (0 >= goldNum) {
+                return MetaServiceResult.returnError("构建奖励模型异常:奖励金币数量不能小于零");
+            }
+            metaAwardReceiveDTO.setConfig(String.valueOf(goldNum));
+        }
+        if (MetaAwardTypeEnum.META_PROP.equals(metaAwardReceiveDTO.getAwardType())) {
+            if (Objects.isNull(metaPropId)) {
+                return MetaServiceResult.returnError("构建奖励模型异常:奖励道具id不能为空");
+            }
+            metaAwardReceiveDTO.setConfig(String.valueOf(metaPropId));
+        }
+        return MetaServiceResult.returnSuccess("奖励模型构建成功");
+    }
+}

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

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

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

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

+ 3 - 7
src/main/java/com/izouma/nineth/service/MetaGameBoxPointsService.java

@@ -6,7 +6,6 @@ import com.izouma.nineth.domain.MetaGameBoxPoints;
 import com.izouma.nineth.dto.MetaGameBoxPointsDTO;
 import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
-import com.izouma.nineth.enums.MetaPointTypeEnum;
 import com.izouma.nineth.repo.MetaGameBoxPointsRepo;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
@@ -28,7 +27,7 @@ public class MetaGameBoxPointsService {
         return metaGameBoxPointsRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaGameBoxPoints.class), JpaUtils.toPageRequest(pageQuery));
     }
 
-    public MetaRestResult<MetaGameBoxPointsDTO> get(Long userId, MetaPointTypeEnum type) {
+    public MetaRestResult<MetaGameBoxPointsDTO> get(Long userId, int type) {
         MetaGameBoxPointsDTO metaGameBoxPointsDTO = new MetaGameBoxPointsDTO();
         MetaGameBoxPoints metaGameBoxPoints = metaGameBoxPointsRepo.findByUserIdAndType(userId, type);
         if (Objects.isNull(metaGameBoxPoints)) {
@@ -38,12 +37,12 @@ public class MetaGameBoxPointsService {
             metaGameBoxPoints.setScore(0);
             metaGameBoxPointsRepo.save(metaGameBoxPoints);
         }
-        Map<String, Object> metaGameBoxPointsMap = metaGameBoxPointsRepo.findInfoByUserIdAndType(userId, type.toString());
+        Map<String, Object> metaGameBoxPointsMap = metaGameBoxPointsRepo.findInfoByUserIdAndType(userId, type);
         String jsonStr = JSONObject.toJSONString(metaGameBoxPointsMap);
         metaGameBoxPoints = JSONObject.parseObject(jsonStr, MetaGameBoxPoints.class);
         metaGameBoxPointsDTO.setSelfHiScore(metaGameBoxPoints.getScore());
         metaGameBoxPointsDTO.setSelfRank(metaGameBoxPoints.getScoreRank());
-        List<Map<String, Object>> map = metaGameBoxPointsRepo.findTopFiftyByType(type.toString());
+        List<Map<String, Object>> map = metaGameBoxPointsRepo.findTopFiftyByType(type);
         JSONArray jsonArray = new JSONArray();
         jsonArray.addAll(map);
         List<MetaGameBoxPoints> data = jsonArray.toJavaList(MetaGameBoxPoints.class);
@@ -59,9 +58,6 @@ public class MetaGameBoxPointsService {
         if (Objects.isNull(record.getUserId())) {
             return MetaRestResult.returnError("Illegal parameter : userId can not be null");
         }
-        if (Objects.isNull(record.getType())) {
-            return MetaRestResult.returnError("Illegal parameter : type can not be null");
-        }
         MetaGameBoxPoints metaGameBoxPoints = metaGameBoxPointsRepo.findByUserIdAndType(record.getUserId(), record.getType());
         if (Objects.isNull(metaGameBoxPoints)) {
             metaGameBoxPoints = new MetaGameBoxPoints();

+ 10 - 4
src/main/java/com/izouma/nineth/service/MetaGameCopyService.java

@@ -3,9 +3,7 @@ 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.dto.*;
 import com.izouma.nineth.repo.MetaGameCopyRepo;
 import com.izouma.nineth.repo.MetaGameProcessRepo;
 import com.izouma.nineth.repo.MetaZombieRepo;
@@ -34,6 +32,8 @@ public class MetaGameCopyService {
 
     private UserRepo userRepo;
 
+    private MetaAwardReceiveService metaAwardReceiveService;
+
     public Page<MetaGameCopy> all(PageQuery pageQuery) {
         return metaGameCopyRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaGameCopy.class), JpaUtils.toPageRequest(pageQuery));
     }
@@ -108,7 +108,13 @@ public class MetaGameCopyService {
         }
         metaGameProcess.setPoint(point);
         if (metaGameProcess.isCompleted()) {
-            metaGameProcess.setMetaGameAward(LotteryUtils.lottery(metaGameCopy.getMetaGameAwards()));
+            metaGameProcess.setMetaGameAward(LotteryUtils.lotteryForMetaGameAward(metaGameCopy.getMetaGameAwards()));
+//            MetaServiceResult result = metaAwardReceiveService.receive(new MetaAwardReceiveDTO(metaGameProcess.getMetaGameAward().getAwardType(), metaGameProcess.getMetaGameAward().getConfig(), metaGameProcess.getUserId(), "游戏"));
+//            if (!result.isSuccess()) {
+//                // 自动领取奖励失败,保存进度,返回错误
+//                metaGameProcessRepo.save(metaGameProcess);
+//                return MetaRestResult.returnError(result.getMessage());
+//            }
         }
         return MetaRestResult.returnSuccess(metaGameProcessRepo.save(metaGameProcess));
     }

+ 83 - 0
src/main/java/com/izouma/nineth/service/MetaLuckyDrawAwardReceiveRecordService.java

@@ -0,0 +1,83 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.annotations.RedisLock;
+import com.izouma.nineth.domain.MetaLuckyDraw;
+import com.izouma.nineth.domain.MetaLuckyDrawAwardModel;
+import com.izouma.nineth.domain.MetaLuckyDrawAwardReceiveRecord;
+import com.izouma.nineth.dto.MetaAwardReceiveDTO;
+import com.izouma.nineth.dto.MetaRestResult;
+import com.izouma.nineth.dto.MetaServiceResult;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.MetaAwardTypeEnum;
+import com.izouma.nineth.repo.MetaLuckyDrawAwardReceiveRecordRepo;
+import com.izouma.nineth.repo.MetaLuckyDrawRepo;
+import com.izouma.nineth.utils.JpaUtils;
+import com.izouma.nineth.utils.LotteryUtils;
+import com.izouma.nineth.utils.SecurityUtils;
+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.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+@AllArgsConstructor
+public class MetaLuckyDrawAwardReceiveRecordService {
+
+    private MetaLuckyDrawAwardReceiveRecordRepo metaLuckyDrawAwardReceiveRecordRepo;
+
+    private MetaLuckyDrawRepo metaLuckyDrawRepo;
+
+    private MetaAwardReceiveService metaAwardReceiveService;
+
+    public Page<MetaLuckyDrawAwardReceiveRecord> all(PageQuery pageQuery) {
+        return metaLuckyDrawAwardReceiveRecordRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaLuckyDrawAwardReceiveRecord.class), JpaUtils.toPageRequest(pageQuery));
+    }
+
+    @RedisLock("#metaLuckyDrawId")
+    @Transactional
+    public MetaRestResult<MetaLuckyDrawAwardReceiveRecord> save(Long metaLuckyDrawId) {
+        Long userId = SecurityUtils.getAuthenticatedUser().getId();
+        MetaLuckyDraw metaLuckyDraw = metaLuckyDrawRepo.findById(metaLuckyDrawId).orElse(null);
+        if (Objects.isNull(metaLuckyDraw)) {
+            return MetaRestResult.returnError("不存在该抽奖活动");
+        }
+        List<MetaLuckyDrawAwardModel> metaLuckDrawAwards = metaLuckyDraw.getMetaLuckDrawAwards();
+        if (CollectionUtils.isEmpty(metaLuckDrawAwards)) {
+            return MetaRestResult.returnError("该抽奖活动未配置奖励");
+        }
+        List<MetaLuckyDrawAwardModel> newMetaLuckDrawAwards = new ArrayList<>();
+        metaLuckDrawAwards.forEach(metaLuckyDrawAwardModel -> {
+            if ((metaLuckyDrawAwardModel.getAwardType().equals(MetaAwardTypeEnum.NFT) || metaLuckyDrawAwardModel.getAwardType().equals(MetaAwardTypeEnum.META_PROP)) && metaLuckyDrawAwardModel.isLimitNum()) {
+                int count = metaLuckyDrawAwardReceiveRecordRepo.countByMetaLuckyDrawIdAndMetaLuckDrawAwardName(metaLuckyDrawId, metaLuckyDrawAwardModel.getName());
+                if (count < metaLuckyDrawAwardModel.getMaxNum()) {
+                    newMetaLuckDrawAwards.add(metaLuckyDrawAwardModel);
+                }
+            } else {
+                newMetaLuckDrawAwards.add(metaLuckyDrawAwardModel);
+            }
+        });
+        if (CollectionUtils.isEmpty(newMetaLuckDrawAwards)) {
+            return MetaRestResult.returnError("当前奖励已经全部抽完!");
+        }
+        MetaLuckyDrawAwardReceiveRecord metaLuckyDrawAwardReceiveRecord = new MetaLuckyDrawAwardReceiveRecord();
+        MetaLuckyDrawAwardModel metaLuckyDrawAwardModel = LotteryUtils.lotteryForMetaLuckyDrawAward(newMetaLuckDrawAwards);
+        metaLuckyDrawAwardReceiveRecord.setMetaLuckyDrawId(metaLuckyDrawId);
+        metaLuckyDrawAwardReceiveRecord.setUserId(userId);
+        metaLuckyDrawAwardReceiveRecord.setReceiveTime(LocalDateTime.now());
+        metaLuckyDrawAwardReceiveRecord.setMetaLuckDrawAward(metaLuckyDrawAwardModel);
+        metaLuckyDrawAwardReceiveRecord.setMetaLuckDrawAwardName(metaLuckyDrawAwardModel.getName());
+        MetaServiceResult receive = metaAwardReceiveService.receive(new MetaAwardReceiveDTO(metaLuckyDrawAwardModel.getAwardType(), metaLuckyDrawAwardModel.getConfig(), userId, "抽奖活动" + metaLuckyDrawId));
+        if (!receive.isSuccess()) {
+            // 抽奖记录正常保存,返回自动领奖错误信息!
+            metaLuckyDrawAwardReceiveRecordRepo.save(metaLuckyDrawAwardReceiveRecord);
+            return MetaRestResult.returnError(receive.getMessage());
+        }
+        return MetaRestResult.returnSuccess(receive.getMessage(), metaLuckyDrawAwardReceiveRecordRepo.save(metaLuckyDrawAwardReceiveRecord));
+    }
+}

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

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

+ 31 - 0
src/main/java/com/izouma/nineth/service/MetaParamsConfigService.java

@@ -0,0 +1,31 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.domain.MetaParamsConfig;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.MetaParamsConfigRepo;
+import com.izouma.nineth.utils.JpaUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class MetaParamsConfigService {
+
+    private MetaParamsConfigRepo metaParamsConfigRepo;
+
+    public Page<MetaParamsConfig> all(PageQuery pageQuery) {
+        return metaParamsConfigRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaParamsConfig.class), JpaUtils.toPageRequest(pageQuery));
+    }
+
+    public boolean getBoolean(String name) {
+        String str = metaParamsConfigRepo.findByName(name).map(MetaParamsConfig::getValue)
+                .orElseThrow(new BusinessException("配置不存在"));
+        return str.equals("1");
+    }
+
+    public String getString(String name) {
+        return metaParamsConfigRepo.findByName(name).map(MetaParamsConfig::getValue).orElse(null);
+    }
+}

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

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

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

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

+ 20 - 37
src/main/java/com/izouma/nineth/service/MetaSignAwardDrawRecordService.java

@@ -1,18 +1,18 @@
 package com.izouma.nineth.service;
 
-import com.izouma.nineth.domain.MetaAccessories;
-import com.izouma.nineth.domain.MetaAccessoriesPurchaseRecord;
 import com.izouma.nineth.domain.MetaSignAward;
 import com.izouma.nineth.domain.MetaSignAwardDrawRecord;
+import com.izouma.nineth.dto.MetaAwardReceiveDTO;
 import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.MetaServiceResult;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.enums.MetaAwardTypeEnum;
-import com.izouma.nineth.repo.*;
+import com.izouma.nineth.repo.MetaSignAwardDrawRecordRepo;
+import com.izouma.nineth.repo.MetaSignAwardRepo;
+import com.izouma.nineth.repo.MetaSignRecordRepo;
 import com.izouma.nineth.utils.DateTimeUtils;
 import com.izouma.nineth.utils.JpaUtils;
 import com.izouma.nineth.utils.SecurityUtils;
-import com.izouma.nineth.web.MetaUserGoldController;
 import lombok.AllArgsConstructor;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.data.domain.Page;
@@ -33,14 +33,10 @@ public class MetaSignAwardDrawRecordService {
 
     private MetaSignAwardRepo metaSignAwardRepo;
 
-    private MetaUserGoldController metaUserGoldController;
-
-    private MetaAccessoriesPurchaseRecordRepo metaAccessoriesPurchaseRecordRepo;
-
-    private MetaAccessoriesRepo metaAccessoriesRepo;
-
     private MetaSignRecordRepo metaSignRecordRepo;
 
+    private MetaAwardReceiveService metaAwardReceiveService;
+
     public Page<MetaSignAwardDrawRecord> all(PageQuery pageQuery) {
         return metaSignAwardDrawRecordRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaSignAwardDrawRecord.class), JpaUtils.toPageRequest(pageQuery));
     }
@@ -60,35 +56,22 @@ public class MetaSignAwardDrawRecordService {
         if (!result.isSuccess()) {
             return MetaRestResult.returnError(result.getMessage());
         }
-        if (MetaAwardTypeEnum.GOLD.equals(metaSignAward.getAwardType())) {
-            // 给用户增加金币
-            metaUserGoldController.changeNum(userId, metaSignAward.getGoldNum());
-            metaSignAwardDrawRecordRepo.save(new MetaSignAwardDrawRecord(userId, metaSignAwardId, metaSignAward.getDate()));
-            metaSignAward.setDraw(true);
-            return MetaRestResult.returnSuccess("金币奖励领取成功,已自动加入金币余额", metaSignAward);
+        MetaAwardTypeEnum awardType = metaSignAward.getAwardType();
+        MetaAwardReceiveDTO metaAwardReceiveDTO = new MetaAwardReceiveDTO();
+        metaAwardReceiveDTO.setAwardType(awardType);
+        metaAwardReceiveDTO.setUserId(userId);
+        metaAwardReceiveDTO.setRemark("累计签到" + metaSignAwardId);
+        MetaServiceResult buildAwardConfigResult = metaAwardReceiveService.buildAwardConfig(metaAwardReceiveDTO, metaSignAward.getMetaPropId(), metaSignAward.getGoldNum());
+        if (!buildAwardConfigResult.isSuccess()) {
+            return MetaRestResult.returnError(buildAwardConfigResult.getMessage());
         }
-        if (MetaAwardTypeEnum.ACCESSORIES.equals(metaSignAward.getAwardType())) {
-            Long metaAccessoriesId = metaSignAward.getMetaAccessoriesId();
-            MetaAccessories metaAccessories = metaAccessoriesRepo.findByIdAndDel(metaAccessoriesId, false);
-            if (Objects.isNull(metaAccessories)) {
-                return MetaRestResult.returnError("该配饰不存在");
-            }
-            MetaAccessoriesPurchaseRecord metaAccessoriesPurchaseRecord = metaAccessoriesPurchaseRecordRepo.findByUserIdAndMetaAccessoriesId(userId, metaAccessoriesId);
-            if (Objects.isNull(metaAccessoriesPurchaseRecord)) {
-                metaAccessoriesPurchaseRecordRepo.save(new MetaAccessoriesPurchaseRecord(userId, metaAccessoriesId));
-                metaSignAwardDrawRecordRepo.save(new MetaSignAwardDrawRecord(userId, metaSignAwardId, metaSignAward.getDate()));
-                metaSignAward.setDraw(true);
-                return MetaRestResult.returnSuccess("配饰奖励领取成功", metaSignAward);
-            }
-            // 配饰已经存在,转化为对应金币
-            metaUserGoldController.changeNum(userId, metaAccessories.getPrice());
-            metaSignAwardDrawRecordRepo.save(new MetaSignAwardDrawRecord(userId, metaSignAwardId, metaSignAward.getDate()));
-            metaSignAward.setDraw(true);
-            return MetaRestResult.returnSuccess("玩家已经拥有该配饰,奖励自动转化为金币", metaSignAward);
+        MetaServiceResult receive = metaAwardReceiveService.receive(metaAwardReceiveDTO);
+        if (!receive.isSuccess()) {
+            return MetaRestResult.returnError(receive.getMessage());
         }
-        metaSignAwardDrawRecordRepo.save(new MetaSignAwardDrawRecord(userId, metaSignAwardId, metaSignAward.getDate()));
         metaSignAward.setDraw(true);
-        return MetaRestResult.returnSuccess("NFT奖励领取成功,将在指定时间统一发放给用户", metaSignAward);
+        metaSignAwardDrawRecordRepo.save(new MetaSignAwardDrawRecord(userId, metaSignAwardId, metaSignAward.getDate()));
+        return MetaRestResult.returnSuccess(receive.getMessage(), metaSignAward);
     }
 
     private MetaServiceResult check(Long userId, MetaSignAward metaSignAward) {
@@ -101,7 +84,7 @@ public class MetaSignAwardDrawRecordService {
         LocalDate firstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
         // 获取当前月的最后一天
         LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
-        List<LocalDate> metaSignRecords = metaSignRecordRepo.findSigns(firstDay, lastDay, userId);
+        List<LocalDate> metaSignRecords = metaSignRecordRepo.findSigns(firstDay, lastDay, userId, metaSignAward.getChannelId());
         int count = 0;
         if (CollectionUtils.isNotEmpty(metaSignRecords)) {
             count = metaSignRecords.size();

+ 34 - 42
src/main/java/com/izouma/nineth/service/MetaSignRecordService.java

@@ -1,13 +1,17 @@
 package com.izouma.nineth.service;
 
-import com.izouma.nineth.domain.*;
+import com.izouma.nineth.domain.MetaSign;
+import com.izouma.nineth.domain.MetaSignAward;
+import com.izouma.nineth.domain.MetaSignRecord;
 import com.izouma.nineth.dto.*;
 import com.izouma.nineth.enums.MetaAwardTypeEnum;
-import com.izouma.nineth.repo.*;
+import com.izouma.nineth.repo.MetaSignAwardDrawRecordRepo;
+import com.izouma.nineth.repo.MetaSignAwardRepo;
+import com.izouma.nineth.repo.MetaSignRecordRepo;
+import com.izouma.nineth.repo.MetaSignRepo;
 import com.izouma.nineth.utils.DateTimeUtils;
 import com.izouma.nineth.utils.JpaUtils;
 import com.izouma.nineth.utils.SecurityUtils;
-import com.izouma.nineth.web.MetaUserGoldController;
 import lombok.AllArgsConstructor;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.data.domain.Page;
@@ -33,73 +37,61 @@ public class MetaSignRecordService {
 
     private MetaSignRepo metaSignRepo;
 
-    private MetaUserGoldController metaUserGoldController;
-
-    private MetaAccessoriesPurchaseRecordRepo metaAccessoriesPurchaseRecordRepo;
-
-    private MetaAccessoriesRepo metaAccessoriesRepo;
+    private MetaAwardReceiveService metaAwardReceiveService;
 
     public Page<MetaSignRecord> all(PageQuery pageQuery) {
         return metaSignRecordRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaSignRecord.class), JpaUtils.toPageRequest(pageQuery));
     }
 
     @Transactional
-    public MetaRestResult<MetaSignRecord> save() {
+    public MetaRestResult<MetaSignRecord> save(Long channelId) {
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DateTimeUtils.DATE_FORMAT);
         Long userId = SecurityUtils.getAuthenticatedUser().getId();
         LocalDate signTime = LocalDate.parse(LocalDate.now().format(formatter), formatter);
-        MetaSignRecord dbMetaSignRecord = metaSignRecordRepo.findByUserIdAndSignTimeAndDel(userId, signTime, false);
+        MetaSignRecord dbMetaSignRecord = metaSignRecordRepo.findByUserIdAndChannelIdAndSignTimeAndDel(userId, channelId, signTime, false);
         if (Objects.nonNull(dbMetaSignRecord)) {
-            return MetaRestResult.returnError("今日已经签到,不可重复签到");
+            return MetaRestResult.returnError("该频道下今日已经签到,不可重复签到");
         }
         MetaSignRecord metaSignRecord = new MetaSignRecord();
         metaSignRecord.setSignTime(signTime);
         metaSignRecord.setUserId(userId);
-        MetaServiceResult result = drawAward(userId);
+        metaSignRecord.setChannelId(channelId);
+        MetaServiceResult result = drawAward(userId, channelId);
         if (!result.isSuccess()) {
+            // 奖励领取失败,签到记录正常保存
+            metaSignRecordRepo.save(metaSignRecord);
             return MetaRestResult.returnError(result.getMessage());
         }
         return MetaRestResult.returnSuccess(result.getMessage(), metaSignRecordRepo.save(metaSignRecord));
     }
 
     @Transactional
-    public MetaServiceResult drawAward(Long userId) {
+    public MetaServiceResult drawAward(Long userId, Long channelId) {
         String yyyyMMDate = LocalDate.now().format(DateTimeFormatter.ofPattern(DateTimeUtils.DATE_FORMAT_YYYY_MM));
-        MetaSign metaSign = metaSignRepo.findByDateAndDel(yyyyMMDate, false);
+        MetaSign metaSign = metaSignRepo.findByDateAndChannelIdAndDel(yyyyMMDate, channelId, false);
         if (Objects.isNull(metaSign)) {
-            return MetaServiceResult.returnError(String.format("当前月份[%S]未配置签到规则和每日签到奖励", yyyyMMDate));
-        }
-        if (MetaAwardTypeEnum.GOLD.equals(metaSign.getAwardType())) {
-            // 给用户增加金币
-            metaUserGoldController.changeNum(userId, metaSign.getGoldNum());
-            return MetaServiceResult.returnSuccess("签到成功,金币奖励已自动加入金币余额");
+            return MetaServiceResult.returnError(String.format("当前月份[%S]未配置该频道的签到规则和每日签到奖励", yyyyMMDate));
         }
-        if (MetaAwardTypeEnum.ACCESSORIES.equals(metaSign.getAwardType())) {
-            Long metaAccessoriesId = metaSign.getMetaAccessoriesId();
-            MetaAccessories metaAccessories = metaAccessoriesRepo.findByIdAndDel(metaAccessoriesId, false);
-            if (Objects.isNull(metaAccessories)) {
-                return MetaServiceResult.returnError("签到失败,配饰奖励不存在");
-            }
-            MetaAccessoriesPurchaseRecord metaAccessoriesPurchaseRecord = metaAccessoriesPurchaseRecordRepo.findByUserIdAndMetaAccessoriesId(userId, metaAccessoriesId);
-            if (Objects.isNull(metaAccessoriesPurchaseRecord)) {
-                metaAccessoriesPurchaseRecordRepo.save(new MetaAccessoriesPurchaseRecord(userId, metaAccessoriesId));
-                return MetaServiceResult.returnSuccess("签到成功,配饰奖励领取成功");
-            }
-            // 配饰已经存在,转化为对应金币
-            metaUserGoldController.changeNum(userId, metaAccessories.getPrice());
-            return MetaServiceResult.returnSuccess("签到成功,玩家已经拥有该配饰,奖励自动转化为金币");
+        MetaAwardTypeEnum awardType = metaSign.getAwardType();
+        MetaAwardReceiveDTO metaAwardReceiveDTO = new MetaAwardReceiveDTO();
+        metaAwardReceiveDTO.setAwardType(awardType);
+        metaAwardReceiveDTO.setUserId(userId);
+        metaAwardReceiveDTO.setRemark("每日签到");
+        MetaServiceResult buildAwardConfigResult = metaAwardReceiveService.buildAwardConfig(metaAwardReceiveDTO, metaSign.getMetaPropId(), metaSign.getGoldNum());
+        if (!buildAwardConfigResult.isSuccess()) {
+            return buildAwardConfigResult;
         }
-        return MetaServiceResult.returnSuccess("签到成功,NFT奖励将在指定时间统一发放给用户");
+        return metaAwardReceiveService.receive(metaAwardReceiveDTO);
     }
 
-    public MetaRestResult<MetaSignProgressDTO> signProgress() {
+    public MetaRestResult<MetaSignProgressDTO> signProgress(Long channelId) {
         Long userId = SecurityUtils.getAuthenticatedUser().getId();
         DateTimeFormatter yyyyMM = DateTimeFormatter.ofPattern(DateTimeUtils.DATE_FORMAT_YYYY_MM);
         DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern(DateTimeUtils.DATE_FORMAT);
         String yyyyMMDate = LocalDate.now().format(yyyyMM);
-        List<MetaSignAward> metaSignAwards = metaSignAwardRepo.findByDateAndDel(yyyyMMDate, false);
+        List<MetaSignAward> metaSignAwards = metaSignAwardRepo.findByDateAndChannelIdAndDel(yyyyMMDate, channelId, false);
         if (CollectionUtils.isEmpty(metaSignAwards)) {
-            return MetaRestResult.returnError(String.format("当前月份[%S]未配置任何签到奖励", yyyyMMDate));
+            return MetaRestResult.returnError(String.format("当前月份[%S]未配置该频道任何签到奖励", yyyyMMDate));
         }
         List<Long> metaSignAwardIds = metaSignAwardDrawRecordRepo.findMetaSignAwardIdsByUserIdAndDateAndDel(userId, yyyyMMDate);
         if (CollectionUtils.isNotEmpty(metaSignAwardIds)) {
@@ -110,7 +102,7 @@ public class MetaSignRecordService {
             });
         }
         LocalDate yyyyMMddDate = LocalDate.parse(LocalDate.now().format(yyyyMMdd), yyyyMMdd);
-        MetaSignRecord metaSignRecord = metaSignRecordRepo.findByUserIdAndSignTimeAndDel(userId, yyyyMMddDate, false);
+        MetaSignRecord metaSignRecord = metaSignRecordRepo.findByUserIdAndChannelIdAndSignTimeAndDel(userId, channelId, yyyyMMddDate, false);
         String isSignIn = null;
         if (Objects.isNull(metaSignRecord)) {
             isSignIn = LocalDate.now().format(yyyyMMdd);
@@ -119,7 +111,7 @@ public class MetaSignRecordService {
         LocalDate firstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
         // 获取当前月的最后一天
         LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
-        List<LocalDate> metaSignRecords = metaSignRecordRepo.findSigns(firstDay, lastDay, userId);
+        List<LocalDate> metaSignRecords = metaSignRecordRepo.findSigns(firstDay, lastDay, userId, channelId);
         List<SignInCalendar> signInCalendars = queryAllDatesOfMonth();
         if (CollectionUtils.isNotEmpty(metaSignRecords)) {
             signInCalendars.forEach(signInCalendar -> {
@@ -128,9 +120,9 @@ public class MetaSignRecordService {
                 }
             });
         }
-        MetaSign metaSign = metaSignRepo.findByDateAndDel(yyyyMMDate, false);
+        MetaSign metaSign = metaSignRepo.findByDateAndChannelIdAndDel(yyyyMMDate, channelId, false);
         if (Objects.isNull(metaSign)) {
-            return MetaRestResult.returnError(String.format("当前月份[%S]未配置签到规则和每日签到奖励", yyyyMMDate));
+            return MetaRestResult.returnError(String.format("当前月份[%S]未配置该频道签到规则和每日签到奖励", yyyyMMDate));
         }
         MetaSignProgressDTO metaSignProgressDTO = new MetaSignProgressDTO();
         metaSignProgressDTO.setIsSignIn(isSignIn);

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

@@ -26,7 +26,7 @@ public class MetaTaskService {
     }
 
     @Transactional
-    public void finish( Long id) {
+    public void finish(Long id) {
         MetaTask metaTask = metaTaskRepo.findByIdAndDel(id, false);
         if (Objects.isNull(metaTask)) {
             throw new BusinessException("无记录");

+ 19 - 18
src/main/java/com/izouma/nineth/service/MetaTaskToUserService.java

@@ -86,25 +86,26 @@ public class MetaTaskToUserService {
         metaTaskToUser.setGetTime(LocalDateTime.now());
         metaTaskToUser.setAwardType(metaTask.getAwardType());
         metaTaskToUser.setStatus(MetaTaskStatus.PROGRESS);
+        metaTaskToUser.setChannelId(metaTask.getChannelId());
         MetaTaskToUser save = metaTaskToUserRepo.save(metaTaskToUser);
         setProgress(save);
         return MetaRestResult.returnSuccess(save);
     }
 
 
-    public MetaRestResult<List<MetaTaskToUser>> findByStatus(Long userId, MetaTaskStatus status) {
-        List<MetaTaskToUser> metaTaskToUsers = metaTaskToUserRepo.findAllByUserIdAndStatusAndDel(userId, status, false);
+    public MetaRestResult<List<MetaTaskToUser>> findByStatus(Long userId, Long channelId, MetaTaskStatus status) {
+        List<MetaTaskToUser> metaTaskToUsers = metaTaskToUserRepo.findAllByUserIdAndChannelIdAndStatusAndDel(userId, channelId, status, false);
         metaTaskToUsers.forEach(this::setProgress);
         return MetaRestResult.returnSuccess(metaTaskToUsers);
     }
 
     public MetaRestResult<MetaTaskToUser> findProgress(Long id) {
-        MetaTaskToUser metaTaskToUsers = metaTaskToUserRepo.findByIdAndDel(id, false);
-        if (Objects.isNull(metaTaskToUsers)) {
+        MetaTaskToUser metaTaskToUser = metaTaskToUserRepo.findByIdAndDel(id, false);
+        if (Objects.isNull(metaTaskToUser)) {
             return MetaRestResult.returnError(String.format("根据id[%S]查询不到用户领取记录", id));
         }
-        setProgress(metaTaskToUsers);
-        return MetaRestResult.returnSuccess(metaTaskToUsers);
+        setProgress(metaTaskToUser);
+        return MetaRestResult.returnSuccess(metaTaskToUser);
     }
 
 
@@ -120,18 +121,18 @@ public class MetaTaskToUserService {
         }
         String value = metaTask.getValue();
         switch (metaTaskToUser.getTaskType()) {
-            case SIGN_IN_SINGLE_DAY:
-                List<MetaUserTaskProgress> signInSingleDay = metaUserTaskProgressRepo.findAllByMetaTaskToUserIdAndDel(metaTaskToUser.getId(), false);
-                if (CollectionUtils.isEmpty(signInSingleDay)) {
-                    metaTaskToUser.setProcess(PREFIX.concat("1"));
-                    break;
-                }
-                metaTaskToUser.setProcess(String.valueOf(signInSingleDay.size()).concat("/1"));
-                break;
-            case SIGN_IN_CONTINUOUS:
-                int num = countSignIn(value, metaTaskToUser.getId());
-                metaTaskToUser.setProcess(String.valueOf(num).concat("/7"));
-                break;
+//            case SIGN_IN_SINGLE_DAY:
+//                List<MetaUserTaskProgress> signInSingleDay = metaUserTaskProgressRepo.findAllByMetaTaskToUserIdAndDel(metaTaskToUser.getId(), false);
+//                if (CollectionUtils.isEmpty(signInSingleDay)) {
+//                    metaTaskToUser.setProcess(PREFIX.concat("1"));
+//                    break;
+//                }
+//                metaTaskToUser.setProcess(String.valueOf(signInSingleDay.size()).concat("/1"));
+//                break;
+//            case SIGN_IN_CONTINUOUS:
+//                int num = countSignIn(value, metaTaskToUser.getId());
+//                metaTaskToUser.setProcess(String.valueOf(num).concat("/7"));
+//                break;
             case COLLECT_COLLECTION:
                 if (StringUtils.isBlank(value)) {
                     String errMsg = "任务进度显示异常,缺少藏品id配置";

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

@@ -40,11 +40,10 @@ public class MetaUserGoldService {
         List<MetaUserGoldRecord> metaUserGoldRecords = new ArrayList<>();
         Arrays.stream(split).forEach(userId -> {
             metaUserGolds.add(new MetaUserGold(Long.parseLong(userId), 0));
-            metaUserGoldRecords.add(new MetaUserGoldRecord(Long.parseLong(userId), 0, 0, 0));
+            metaUserGoldRecords.add(new MetaUserGoldRecord(Long.parseLong(userId), 0, 0, 0, "初始化"));
         });
         metaUserGoldRepo.saveAll(metaUserGolds);
         metaUserGoldRecordRepo.saveAll(metaUserGoldRecords);
-
     }
 
     public void checkUserId(String userIds) {
@@ -68,7 +67,7 @@ public class MetaUserGoldService {
     }
 
     @Transactional
-    public MetaRestResult<MetaUserGold> changeNum(Long userId, int num) {
+    public MetaRestResult<MetaUserGold> changeNum(Long userId, int num, String remark) {
         MetaUserGold metaUserGold = metaUserGoldRepo.findByUserIdAndDel(userId, false);
         if (Objects.isNull(metaUserGold)) {
             log.info(String.format("不存在用户[%S]记录。默认初始化", userId));
@@ -82,6 +81,7 @@ public class MetaUserGoldService {
         metaUserGoldRecord.setBeforeNum(nowNum);
         metaUserGoldRecord.setAfterNum(nowNum + num);
         metaUserGoldRecord.setOperationNum(num);
+        metaUserGoldRecord.setRemark(remark);
         if (metaUserGoldRecord.getAfterNum() < 0) {
             return MetaRestResult.returnError(String.format("用户[%S] 当前金币剩余[%S] 本次操作需要金币数量为[%S]", userId, nowNum, -num));
         }

+ 27 - 0
src/main/java/com/izouma/nineth/service/MetaUserPropRecordService.java

@@ -0,0 +1,27 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.domain.MetaProp;
+import com.izouma.nineth.domain.MetaUserPropRecord;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.MetaPropOperationType;
+import com.izouma.nineth.repo.MetaUserPropRecordRepo;
+import com.izouma.nineth.utils.JpaUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class MetaUserPropRecordService {
+
+    private MetaUserPropRecordRepo metaUserPropRecordRepo;
+
+    public Page<MetaUserPropRecord> all(PageQuery pageQuery) {
+        return metaUserPropRecordRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaUserPropRecord.class), JpaUtils.toPageRequest(pageQuery));
+    }
+
+    public MetaUserPropRecord save(Long userId, MetaProp metaProp, MetaPropOperationType operationType, int num) {
+        MetaUserPropRecord metaUserPropRecord = MetaUserPropRecord.create(userId, metaProp, operationType, num);
+        return metaUserPropRecordRepo.save(metaUserPropRecord);
+    }
+}

+ 153 - 0
src/main/java/com/izouma/nineth/service/MetaUserPropService.java

@@ -0,0 +1,153 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.domain.MetaProp;
+import com.izouma.nineth.domain.MetaUserProp;
+import com.izouma.nineth.dto.MetaRestResult;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.MetaPropOperationType;
+import com.izouma.nineth.enums.MetaPropUsedType;
+import com.izouma.nineth.repo.MetaPropRepo;
+import com.izouma.nineth.repo.MetaUserPropRepo;
+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 MetaUserPropService {
+
+    private MetaUserPropRepo metaUserPropRepo;
+
+    private MetaPropRepo metaPropRepo;
+
+    private MetaUserPropRecordService metaUserPropRecordService;
+
+    private MetaUserGoldService metaUserGoldService;
+
+    public Page<MetaUserProp> all(PageQuery pageQuery) {
+        return metaUserPropRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaUserProp.class), JpaUtils.toPageRequest(pageQuery));
+    }
+
+    @Transactional
+    public MetaRestResult<MetaUserProp> operate(Long userId, Long metaPropId, MetaPropOperationType operationType, int num) {
+        if (Objects.isNull(metaPropId)) {
+            return MetaRestResult.returnError("Illegal parameter : metaPropId can not be null");
+        }
+        MetaProp metaProp = metaPropRepo.findById(metaPropId).orElse(null);
+        if (Objects.isNull(metaProp)) {
+            return MetaRestResult.returnError("道具不存在!");
+        }
+        MetaUserProp dbMetaUserProp = metaUserPropRepo.findByUserIdAndMetaPropIdAndDel(userId, metaPropId, false);
+        if (MetaPropOperationType.RECEIVE.equals(operationType)) {
+            if (num < 1) {
+                return MetaRestResult.returnError("道具数量最少为1");
+            }
+            return receive(userId, dbMetaUserProp, metaProp, num);
+        }
+        if (MetaPropOperationType.CANCEL_USE.equals(operationType)) {
+            return cancelUse(dbMetaUserProp, metaProp);
+        }
+        return use(dbMetaUserProp, metaProp);
+    }
+
+    /**
+     * 永久道具 取消使用
+     *
+     * @param metaUserProp 永久道具持有信息
+     * @param metaProp     道具信息
+     * @return
+     */
+    @Transactional
+    public MetaRestResult<MetaUserProp> cancelUse(MetaUserProp metaUserProp, MetaProp metaProp) {
+        if (Objects.isNull(metaUserProp)) {
+            return MetaRestResult.returnError("玩家未拥有该道具!");
+        }
+        if (!MetaPropUsedType.PERMANENT.equals(metaProp.getUsedType())) {
+            return MetaRestResult.returnError("仅限永久道具才能取消使用!");
+        }
+        metaUserProp.setUsed(false);
+        metaUserPropRecordService.save(metaUserProp.getUserId(), metaProp, MetaPropOperationType.CANCEL_USE, 1);
+        return MetaRestResult.returnSuccess("取消使用成功", metaUserPropRepo.save(metaUserProp));
+    }
+
+    /**
+     * 获得道具
+     *
+     * @param userId       用户id
+     * @param metaUserProp 道具持有信息
+     * @param metaProp     道具信息
+     * @param num          数量
+     * @return
+     */
+    @Transactional
+    public MetaRestResult<MetaUserProp> receive(Long userId, MetaUserProp metaUserProp, MetaProp metaProp, int num) {
+        boolean init = false;
+        if (Objects.isNull(metaUserProp)) {
+            metaUserProp = MetaUserProp.create(userId, metaProp, num);
+            init = true;
+        } else {
+            metaUserProp.setNum(metaUserProp.getNum() + num);
+        }
+        if (MetaPropUsedType.PERMANENT.equals(metaProp.getUsedType()) && 1 < metaUserProp.getNum()) {
+            int metaPropPrice = metaProp.getGoldNum();
+            int metaPropNum = metaUserProp.getNum() - 1;
+            if (0 >= metaPropPrice) {
+                metaPropPrice = 100;
+            }
+            int goldNum = metaPropPrice * metaPropNum;
+            metaUserGoldService.changeNum(userId, goldNum, String.format("永久道具:[%S],数量:[%S],单价:[%S],转化成金币[%S]", metaProp.getId(), metaPropNum, metaPropPrice, goldNum));
+            metaUserProp.setNum(1);
+            // 未拥有该道具,领取一个,多余转化为金币
+            if (init) {
+                MetaUserProp save = metaUserPropRepo.save(metaUserProp);
+                metaUserPropRecordService.save(metaUserProp.getUserId(), metaProp, MetaPropOperationType.RECEIVE, 1);
+                return MetaRestResult.returnSuccess(String.format("永久道具仅限持有一个,多余道具将转化为[%S]个金币!", goldNum), save);
+            }
+            // 已拥有该道具,全部转为道具后返回
+            return MetaRestResult.returnSuccess(String.format("玩家已拥有该道具,所领取的道具将转化为[%S]个金币!", goldNum));
+        }
+        MetaUserProp save = metaUserPropRepo.save(metaUserProp);
+        metaUserPropRecordService.save(metaUserProp.getUserId(), metaProp, MetaPropOperationType.RECEIVE, num);
+        return MetaRestResult.returnSuccess("道具领取成功!", save);
+
+    }
+
+    /**
+     * 使用道具
+     *
+     * @param metaUserProp 道具持有信息
+     * @param metaProp     道具信息
+     * @return
+     */
+    @Transactional
+    public MetaRestResult<MetaUserProp> use(MetaUserProp metaUserProp, MetaProp metaProp) {
+        if (Objects.isNull(metaUserProp)) {
+            return MetaRestResult.returnError("玩家未拥有该道具!");
+        }
+        // 永久道具 不对背包做操作,增加一条操作记录
+        if (MetaPropUsedType.PERMANENT.equals(metaProp.getUsedType())) {
+            metaUserProp.setUsed(true);
+            metaUserPropRecordService.save(metaUserProp.getUserId(), metaProp, MetaPropOperationType.USE, 1);
+            return MetaRestResult.returnSuccess(metaUserPropRepo.save(metaUserProp));
+        }
+        // 数量为1的非永久道具,成功使用后直接删除背包中该道具数据,增加一条操作记录
+        if (1 == metaUserProp.getNum()) {
+            metaUserProp.setNum(0);
+            metaUserPropRecordService.save(metaUserProp.getUserId(), metaProp, MetaPropOperationType.USE, 1);
+            metaUserPropRepo.deleteByUserIdAndMetaPropId(metaUserProp.getUserId(), metaProp.getId());
+            return MetaRestResult.returnSuccess(metaUserProp);
+        }
+        // 数量大于1的非永久道具,背包中该道具数量减1,增加一条操作记录
+        metaUserProp.setNum(metaUserProp.getNum() - 1);
+        metaUserPropRecordService.save(metaUserProp.getUserId(), metaProp, MetaPropOperationType.USE, 1);
+        return MetaRestResult.returnSuccess(metaUserPropRepo.save(metaUserProp));
+    }
+
+    public void aspect() {
+        metaUserPropRepo.deleteNumZero();
+    }
+}

+ 75 - 0
src/main/java/com/izouma/nineth/service/MetaUserTaskAwardReceivedRecordService.java

@@ -0,0 +1,75 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.domain.MetaTask;
+import com.izouma.nineth.domain.MetaTaskToUser;
+import com.izouma.nineth.domain.MetaUserTaskAwardReceivedRecord;
+import com.izouma.nineth.dto.MetaAwardReceiveDTO;
+import com.izouma.nineth.dto.MetaRestResult;
+import com.izouma.nineth.dto.MetaServiceResult;
+import com.izouma.nineth.enums.MetaTaskStatus;
+import com.izouma.nineth.enums.MetaTaskType;
+import com.izouma.nineth.repo.MetaTaskRepo;
+import com.izouma.nineth.repo.MetaTaskToUserRepo;
+import com.izouma.nineth.repo.MetaUserTaskAwardReceivedRecordRepo;
+import com.izouma.nineth.utils.SecurityUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.time.LocalDateTime;
+import java.util.Objects;
+
+@Service
+@AllArgsConstructor
+public class MetaUserTaskAwardReceivedRecordService {
+
+    private MetaTaskToUserRepo metaTaskToUserRepo;
+
+    private MetaTaskRepo metaTaskRepo;
+
+    private MetaAwardReceiveService metaAwardReceiveService;
+
+    private MetaUserTaskAwardReceivedRecordRepo metaUserTaskAwardReceivedRecordRepo;
+
+    @Transactional
+    public MetaRestResult<Void> receiveAward(Long metaTaskId) {
+        Long userId = SecurityUtils.getAuthenticatedUser().getId();
+        MetaTask metaTask = metaTaskRepo.findByIdAndDel(metaTaskId, false);
+        if (Objects.isNull(metaTask)) {
+            return MetaRestResult.returnError("奖励领取失败:不存在该任务!");
+        }
+        MetaTaskToUser metaTaskToUser = metaTaskToUserRepo.findByUserIdAndTaskIdAndDel(userId, metaTaskId, false);
+        if (Objects.isNull(metaTaskToUser)) {
+            return MetaRestResult.returnError("奖励领取失败:用户未领取过该任务!");
+        }
+        if (MetaTaskStatus.PROGRESS.equals(metaTaskToUser.getStatus()) || MetaTaskStatus.FINISH.equals(metaTaskToUser.getStatus())) {
+            return MetaRestResult.returnError(String.format("奖励领取失败:当前任务状态为[%S]", metaTaskToUser.getStatus().getDescription()));
+        }
+        if (MetaTaskType.ON_LINE_TIME_DAILY.equals(metaTask.getType())) {
+            MetaUserTaskAwardReceivedRecord metaUserTaskAwardReceivedRecord = metaUserTaskAwardReceivedRecordRepo.findByUserIdAndMetaTaskIdAndDelAndCreatedAtAfter(userId, metaTaskId, false, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
+            if (Objects.nonNull(metaUserTaskAwardReceivedRecord)) {
+                return MetaRestResult.returnError("奖励领取失败:用户今天已经领取过该任务奖励,不可重复领取!");
+            }
+        }
+        if (!MetaTaskType.ON_LINE_TIME_DAILY.equals(metaTask.getType())) {
+            MetaUserTaskAwardReceivedRecord metaUserTaskAwardReceivedRecord = metaUserTaskAwardReceivedRecordRepo.findByUserIdAndMetaTaskIdAndDel(userId, metaTaskId, false);
+            if (Objects.nonNull(metaUserTaskAwardReceivedRecord)) {
+                return MetaRestResult.returnError("奖励领取失败:用户已经领取过该任务奖励,不可重复领取!");
+            }
+        }
+        MetaAwardReceiveDTO metaAwardReceiveDTO = new MetaAwardReceiveDTO();
+        metaAwardReceiveDTO.setUserId(userId);
+        metaAwardReceiveDTO.setAwardType(metaTask.getAwardType());
+        metaAwardReceiveDTO.setRemark("任务" + metaTaskId);
+        MetaServiceResult result = metaAwardReceiveService.buildAwardConfig(metaAwardReceiveDTO, metaTask.getMetaPropId(), metaTask.getGoldNum());
+        if (!result.isSuccess()) {
+            return MetaRestResult.returnError(result.getMessage());
+        }
+        MetaServiceResult receive = metaAwardReceiveService.receive(metaAwardReceiveDTO);
+        if (!receive.isSuccess()) {
+            return MetaRestResult.returnError(receive.getMessage());
+        }
+        metaUserTaskAwardReceivedRecordRepo.save(new MetaUserTaskAwardReceivedRecord(userId, metaTaskId));
+        return MetaRestResult.returnSuccess(receive.getMessage());
+    }
+}

+ 32 - 35
src/main/java/com/izouma/nineth/service/MetaUserTaskProgressService.java

@@ -13,15 +13,12 @@ import com.izouma.nineth.repo.MetaTaskToUserRepo;
 import com.izouma.nineth.repo.MetaUserTaskProgressRepo;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
-import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
@@ -97,20 +94,20 @@ public class MetaUserTaskProgressService {
             }
         }
         // 单日签到任务
-        if (metaTaskToUser.getTaskType().equals(MetaTaskType.SIGN_IN_SINGLE_DAY)) {
-            if (StringUtils.isBlank(value)) {
-                return MetaRestResult.returnError("单日签到任务未配置签到日期");
-            }
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-            LocalDateTime startTime = LocalDate.parse(value, formatter).atStartOfDay();
-            if (!startTime.format(formatter).equals(LocalDateTime.now().format(formatter))) {
-                return MetaRestResult.returnError("当前日期不允许签到");
-            }
-            List<MetaUserTaskProgress> metaUserTaskProgresses = metaUserTaskProgressRepo.findAllByMetaTaskToUserIdAndDel(metaTaskToUser.getId(), false);
-            if (CollectionUtils.isNotEmpty(metaUserTaskProgresses)) {
-                return MetaRestResult.returnError("该签到任务已经签到过,不允许重复签到");
-            }
-        }
+//        if (metaTaskToUser.getTaskType().equals(MetaTaskType.SIGN_IN_SINGLE_DAY)) {
+//            if (StringUtils.isBlank(value)) {
+//                return MetaRestResult.returnError("单日签到任务未配置签到日期");
+//            }
+//            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+//            LocalDateTime startTime = LocalDate.parse(value, formatter).atStartOfDay();
+//            if (!startTime.format(formatter).equals(LocalDateTime.now().format(formatter))) {
+//                return MetaRestResult.returnError("当前日期不允许签到");
+//            }
+//            List<MetaUserTaskProgress> metaUserTaskProgresses = metaUserTaskProgressRepo.findAllByMetaTaskToUserIdAndDel(metaTaskToUser.getId(), false);
+//            if (CollectionUtils.isNotEmpty(metaUserTaskProgresses)) {
+//                return MetaRestResult.returnError("该签到任务已经签到过,不允许重复签到");
+//            }
+//        }
         // 在线时长任务 如记录存在则更新remark(每日在线时长) 如不存在则每日首次触发该任务
         if (metaTaskToUser.getTaskType().equals(MetaTaskType.ON_LINE_TIME_DAILY)) {
             MetaUserTaskProgress dbMetaUserTaskProgress = metaUserTaskProgressRepo.findByMetaTaskToUserIdAndDelAndCreatedAtAfter(metaTaskToUser.getId(), false, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
@@ -125,20 +122,20 @@ public class MetaUserTaskProgressService {
             return MetaRestResult.returnSuccess(false);
         }
         // 连续签到任务 每天只允许签到一次。remark可为每天签到时间也可以为空,具体判定以记录创建时间为准
-        if (metaTaskToUser.getTaskType().equals(MetaTaskType.SIGN_IN_CONTINUOUS)) {
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-            LocalDateTime startTime = LocalDate.parse(value, formatter).atStartOfDay();
-            if (startTime.isAfter(LocalDateTime.now())) {
-                return MetaRestResult.returnError("未到开始日期");
-            }
-            MetaUserTaskProgress dbMetaUserTaskProgress = metaUserTaskProgressRepo.findByMetaTaskToUserIdAndDelAndCreatedAtAfter(metaTaskToUser.getId(), false, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
-            if (Objects.nonNull(dbMetaUserTaskProgress)) {
-                return MetaRestResult.returnError("当日已经存在签到记录,不可重复签到");
-            }
-            save(metaUserTaskProgress, metaTaskToUser);
-            // 该类型任务不存在完成
-            return MetaRestResult.returnSuccess(false);
-        }
+//        if (metaTaskToUser.getTaskType().equals(MetaTaskType.SIGN_IN_CONTINUOUS)) {
+//            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+//            LocalDateTime startTime = LocalDate.parse(value, formatter).atStartOfDay();
+//            if (startTime.isAfter(LocalDateTime.now())) {
+//                return MetaRestResult.returnError("未到开始日期");
+//            }
+//            MetaUserTaskProgress dbMetaUserTaskProgress = metaUserTaskProgressRepo.findByMetaTaskToUserIdAndDelAndCreatedAtAfter(metaTaskToUser.getId(), false, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
+//            if (Objects.nonNull(dbMetaUserTaskProgress)) {
+//                return MetaRestResult.returnError("当日已经存在签到记录,不可重复签到");
+//            }
+//            save(metaUserTaskProgress, metaTaskToUser);
+//            // 该类型任务不存在完成
+//            return MetaRestResult.returnSuccess(false);
+//        }
         // 保存进度
         save(metaUserTaskProgress, metaTaskToUser);
         List<MetaUserTaskProgress> metaUserTaskProgresses = metaUserTaskProgressRepo.findAllByMetaTaskToUserIdAndDel(metaTaskToUser.getId(), false);
@@ -153,10 +150,10 @@ public class MetaUserTaskProgressService {
                     return MetaRestResult.returnSuccess(true);
                 }
                 return MetaRestResult.returnSuccess(false);
-            case SIGN_IN_SINGLE_DAY:
-                // 单日登陆任务签到成功后直接完成
-                completeTask(metaTaskToUser);
-                return MetaRestResult.returnSuccess(true);
+//            case SIGN_IN_SINGLE_DAY:
+//                // 单日登陆任务签到成功后直接完成
+//                completeTask(metaTaskToUser);
+//                return MetaRestResult.returnSuccess(true);
             case ACCUMULATE:
                 if (metaUserTaskProgresses.size() >= Integer.parseInt(value)) {
                     completeTask(metaTaskToUser);

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

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

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.