Explorar el Código

签到管理添加道具奖励

sunkean hace 3 años
padre
commit
e2673b41ef

+ 3 - 0
src/main/java/com/izouma/nineth/config/MetaConstants.java

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

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

@@ -32,9 +32,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奖励图片地址")

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

@@ -34,10 +34,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 +42,10 @@ public class MetaSignAward extends BaseEntity {
     @ExcelProperty("金币奖励数量")
     private int goldNum;
 
+    @ApiModelProperty("道具id")
+    @ExcelProperty("道具id")
+    private Long metaPropId;
+
     @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("奖励所属时间")

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

@@ -71,7 +71,7 @@ public class MetaUserPropRecord extends BaseEntity {
                 .operatingTime(LocalDateTime.now())
                 .usedType(metaProp.getUsedType())
                 .times(metaProp.getUsedType().equals(MetaPropUsedType.LIMITED) ? metaProp.getTimes() : 0)
-                .finish(Boolean.TRUE)
+                .finish(MetaPropOperationType.RECEIVE.equals(operationType) ? Boolean.FALSE : Boolean.TRUE)
                 .build();
     }
 }

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

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

@@ -7,10 +7,13 @@ 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);
 }

+ 49 - 36
src/main/java/com/izouma/nineth/service/MetaSignAwardDrawRecordService.java

@@ -1,18 +1,20 @@
 package com.izouma.nineth.service;
 
-import com.izouma.nineth.domain.MetaAccessories;
-import com.izouma.nineth.domain.MetaAccessoriesPurchaseRecord;
+import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.domain.MetaSignAward;
 import com.izouma.nineth.domain.MetaSignAwardDrawRecord;
+import com.izouma.nineth.domain.MetaUserGold;
+import com.izouma.nineth.domain.MetaUserProp;
 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.enums.MetaPropOperationType;
+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 +35,12 @@ public class MetaSignAwardDrawRecordService {
 
     private MetaSignAwardRepo metaSignAwardRepo;
 
-    private MetaUserGoldController metaUserGoldController;
-
-    private MetaAccessoriesPurchaseRecordRepo metaAccessoriesPurchaseRecordRepo;
-
-    private MetaAccessoriesRepo metaAccessoriesRepo;
+    private MetaUserGoldService metaUserGoldService;
 
     private MetaSignRecordRepo metaSignRecordRepo;
 
+    private MetaUserPropService metaUserPropService;
+
     public Page<MetaSignAwardDrawRecord> all(PageQuery pageQuery) {
         return metaSignAwardDrawRecordRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaSignAwardDrawRecord.class), JpaUtils.toPageRequest(pageQuery));
     }
@@ -60,35 +60,48 @@ 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);
-        }
-        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));
+        switch (metaSignAward.getAwardType()) {
+            case NULL:
+                metaSignAwardDrawRecordRepo.save(new MetaSignAwardDrawRecord(userId, metaSignAwardId, metaSignAward.getDate()));
+                metaSignAward.setDraw(true);
+                return MetaRestResult.returnSuccess("奖励类型为空", metaSignAward);
+            case GOLD:
+                MetaRestResult<MetaUserGold> restResult;
+                try {
+                    restResult = metaUserGoldService.changeNum(userId, metaSignAward.getGoldNum());
+                } catch (Exception e) {
+                    return MetaRestResult.returnError(String.format("金币奖励领取发生异常[%S]", e.getMessage()));
+                }
+                if (Constants.MetaRestCode.success != restResult.getCode()) {
+                    return MetaRestResult.returnError(restResult.getMessage());
+                }
+                metaSignAwardDrawRecordRepo.save(new MetaSignAwardDrawRecord(userId, metaSignAwardId, metaSignAward.getDate()));
+                metaSignAward.setDraw(true);
+                return MetaRestResult.returnSuccess("金币奖励领取成功,已自动加入金币余额", metaSignAward);
+            case META_PROP:
+                Long metaPropId = metaSignAward.getMetaPropId();
+                if (Objects.isNull(metaPropId)) {
+                    return MetaRestResult.returnError("道具id不能为空");
+                }
+                MetaRestResult<MetaUserProp> operate;
+                try {
+                    operate = metaUserPropService.operate(userId, metaPropId, MetaPropOperationType.RECEIVE);
+                } catch (Exception e) {
+                    return MetaRestResult.returnError(String.format("道具奖励领取发生异常[%S]", e.getMessage()));
+                }
+                if (Constants.MetaRestCode.success != operate.getCode()) {
+                    return MetaRestResult.returnError(operate.getMessage());
+                }
+                metaSignAwardDrawRecordRepo.save(new MetaSignAwardDrawRecord(userId, metaSignAwardId, metaSignAward.getDate()));
+                metaSignAward.setDraw(true);
+                return MetaRestResult.returnSuccess("道具奖励领取成功,已放入玩家背包中", metaSignAward);
+            case NFT:
                 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);
+                return MetaRestResult.returnSuccess("NFT奖励领取成功,将在指定时间统一发放给用户", metaSignAward);
+            default:
+                return MetaRestResult.returnError("不存在的奖励类型");
         }
-        metaSignAwardDrawRecordRepo.save(new MetaSignAwardDrawRecord(userId, metaSignAwardId, metaSignAward.getDate()));
-        metaSignAward.setDraw(true);
-        return MetaRestResult.returnSuccess("NFT奖励领取成功,将在指定时间统一发放给用户", metaSignAward);
     }
 
     private MetaServiceResult check(Long userId, MetaSignAward metaSignAward) {

+ 43 - 27
src/main/java/com/izouma/nineth/service/MetaSignRecordService.java

@@ -1,13 +1,16 @@
 package com.izouma.nineth.service;
 
+import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.*;
-import com.izouma.nineth.enums.MetaAwardTypeEnum;
-import com.izouma.nineth.repo.*;
+import com.izouma.nineth.enums.MetaPropOperationType;
+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,11 +36,9 @@ public class MetaSignRecordService {
 
     private MetaSignRepo metaSignRepo;
 
-    private MetaUserGoldController metaUserGoldController;
+    private MetaUserGoldService metaUserGoldService;
 
-    private MetaAccessoriesPurchaseRecordRepo metaAccessoriesPurchaseRecordRepo;
-
-    private MetaAccessoriesRepo metaAccessoriesRepo;
+    private MetaUserPropService metaUserPropService;
 
     public Page<MetaSignRecord> all(PageQuery pageQuery) {
         return metaSignRecordRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaSignRecord.class), JpaUtils.toPageRequest(pageQuery));
@@ -57,6 +58,8 @@ public class MetaSignRecordService {
         metaSignRecord.setUserId(userId);
         MetaServiceResult result = drawAward(userId);
         if (!result.isSuccess()) {
+            // 奖励领取失败,签到记录正常保存
+            metaSignRecordRepo.save(metaSignRecord);
             return MetaRestResult.returnError(result.getMessage());
         }
         return MetaRestResult.returnSuccess(result.getMessage(), metaSignRecordRepo.save(metaSignRecord));
@@ -69,27 +72,40 @@ public class MetaSignRecordService {
         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("签到成功,金币奖励已自动加入金币余额");
-        }
-        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("签到成功,玩家已经拥有该配饰,奖励自动转化为金币");
+        switch (metaSign.getAwardType()) {
+            case NULL:
+                return MetaServiceResult.returnSuccess("奖励类型为空");
+            case GOLD:
+                MetaRestResult<MetaUserGold> restResult;
+                try {
+                    restResult = metaUserGoldService.changeNum(userId, metaSign.getGoldNum());
+                } 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:
+                Long metaPropId = metaSign.getMetaPropId();
+                if (Objects.isNull(metaPropId)) {
+                    return MetaServiceResult.returnError("道具id不能为空");
+                }
+                MetaRestResult<MetaUserProp> operate;
+                try {
+                    operate = metaUserPropService.operate(userId, metaPropId, MetaPropOperationType.RECEIVE);
+                } 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("道具奖励领取成功,已放入玩家背包中");
+            case NFT:
+                return MetaServiceResult.returnSuccess("NFT奖励领取成功,将在指定时间统一发放给用户");
+            default:
+                return MetaServiceResult.returnError("不存在的奖励类型");
         }
-        return MetaServiceResult.returnSuccess("签到成功,NFT奖励将在指定时间统一发放给用户");
     }
 
     public MetaRestResult<MetaSignProgressDTO> signProgress() {

+ 8 - 7
src/main/java/com/izouma/nineth/service/MetaUserPropService.java

@@ -9,7 +9,6 @@ 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 com.izouma.nineth.utils.SecurityUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
@@ -31,7 +30,7 @@ public class MetaUserPropService {
         return metaUserPropRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaUserProp.class), JpaUtils.toPageRequest(pageQuery));
     }
 
-    public MetaRestResult<MetaUserProp> operate(Long metaPropId, MetaPropOperationType operationType) {
+    public MetaRestResult<MetaUserProp> operate(Long userId, Long metaPropId, MetaPropOperationType operationType) {
         if (Objects.isNull(metaPropId)) {
             return MetaRestResult.returnError("Illegal parameter : metaPropId can not be null");
         }
@@ -39,24 +38,26 @@ public class MetaUserPropService {
         if (Objects.isNull(metaProp)) {
             return MetaRestResult.returnError("道具不存在!");
         }
-        Long userId = SecurityUtils.getAuthenticatedUser().getId();
         MetaUserProp dbMetaUserProp = metaUserPropRepo.findByUserIdAndMetaPropIdAndDel(userId, metaPropId, false);
         if (MetaPropOperationType.RECEIVE.equals(operationType)) {
-            return receive(dbMetaUserProp, metaProp);
+            return receive(userId, dbMetaUserProp, metaProp);
         }
         return use(dbMetaUserProp, metaProp);
     }
 
     @Transactional
-    public MetaRestResult<MetaUserProp> receive(MetaUserProp dbMetaUserProp, MetaProp metaProp) {
+    public MetaRestResult<MetaUserProp> receive(Long userId, MetaUserProp dbMetaUserProp, MetaProp metaProp) {
         if (Objects.isNull(dbMetaUserProp)) {
             dbMetaUserProp = new MetaUserProp();
             dbMetaUserProp.setMetaPropId(metaProp.getId());
-            dbMetaUserProp.setUserId(dbMetaUserProp.getUserId());
+            dbMetaUserProp.setUserId(userId);
             dbMetaUserProp.setName(metaProp.getName());
             dbMetaUserProp.setPic(metaProp.getPic());
-            dbMetaUserProp.setNum(0);
+            dbMetaUserProp.setNum(1);
         } else {
+            if (MetaPropUsedType.PERMANENT.equals(metaProp.getUsedType()) && 0 < dbMetaUserProp.getNum()) {
+                return MetaRestResult.returnError("玩家已拥有永久道具,不可重复领取!");
+            }
             dbMetaUserProp.setNum(dbMetaUserProp.getNum() + 1);
         }
         MetaUserProp save = metaUserPropRepo.save(dbMetaUserProp);

+ 5 - 1
src/main/java/com/izouma/nineth/web/MetaPropController.java

@@ -33,7 +33,6 @@ public class MetaPropController extends BaseController {
         return metaPropRepo.save(record);
     }
 
-
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
     public Page<MetaProp> all(@RequestBody PageQuery pageQuery) {
@@ -56,5 +55,10 @@ public class MetaPropController extends BaseController {
         List<MetaProp> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @GetMapping("findAll")
+    public List<MetaProp> findAll() {
+        return metaPropRepo.findAllByDel(false);
+    }
 }
 

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

@@ -1,5 +1,6 @@
 package com.izouma.nineth.web;
 
+import com.izouma.nineth.config.MetaConstants;
 import com.izouma.nineth.domain.MetaResourceVersion;
 import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
@@ -25,19 +26,13 @@ public class MetaResourceVersionController extends BaseController {
     private MetaResourceVersionService metaResourceVersionService;
     private MetaResourceVersionRepo metaResourceVersionRepo;
 
-    private final String VERSION_PREFIX = "V";
-
-    private final String LIKE = "%";
-
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     public MetaResourceVersion save(@RequestBody MetaResourceVersion record) {
-        MetaResourceVersion metaResourceVersion = metaResourceVersionRepo.findByCondition(LIKE.concat(record.getVersion()).concat(LIKE));
+        MetaResourceVersion metaResourceVersion = metaResourceVersionRepo.findByCondition(MetaConstants.LIKE.concat(record.getVersion()).concat(MetaConstants.LIKE));
         if (Objects.nonNull(metaResourceVersion) && !Objects.equals(metaResourceVersion.getId(), record.getId())) {
             throw new BusinessException("当前版本编号已经存在");
         }
-//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
-//        record.setVersion(VERSION_PREFIX.concat(record.getVersion()).concat("-").concat(LocalDateTime.now().format(formatter)));
         if (record.getId() != null) {
             MetaResourceVersion orig = metaResourceVersionRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
             ObjUtils.merge(orig, record);
@@ -46,7 +41,6 @@ public class MetaResourceVersionController extends BaseController {
         return metaResourceVersionRepo.save(record);
     }
 
-
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
     public Page<MetaResourceVersion> all(@RequestBody PageQuery pageQuery) {
@@ -70,7 +64,6 @@ public class MetaResourceVersionController extends BaseController {
         ExcelUtils.export(response, data);
     }
 
-
     @GetMapping("/{version}/downloadUrl")
     public MetaRestResult<String> downloadUrl(@PathVariable String version) {
         MetaResourceVersion metaResourceVersion = metaResourceVersionRepo.findByVersionAndDel(version, false);

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

@@ -36,13 +36,13 @@ public class MetaSignAwardController extends BaseController {
             ObjUtils.merge(orig, record);
             if (MetaAwardTypeEnum.GOLD.equals(record.getAwardType())) {
                 orig.setAwardPic(null);
-                orig.setMetaAccessoriesId(null);
+                orig.setMetaPropId(null);
             }
             if (MetaAwardTypeEnum.NFT.equals(record.getAwardType())) {
                 orig.setGoldNum(0);
-                orig.setMetaAccessoriesId(null);
+                orig.setMetaPropId(null);
             }
-            if (MetaAwardTypeEnum.ACCESSORIES.equals(record.getAwardType())) {
+            if (MetaAwardTypeEnum.META_PROP.equals(record.getAwardType())) {
                 orig.setGoldNum(0);
                 orig.setAwardPic(null);
             }
@@ -51,7 +51,6 @@ public class MetaSignAwardController extends BaseController {
         return metaSignAwardRepo.save(record);
     }
 
-
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
     public Page<MetaSignAward> all(@RequestBody PageQuery pageQuery) {

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

@@ -36,13 +36,13 @@ public class MetaSignController extends BaseController {
             ObjUtils.merge(orig, record);
             if (MetaAwardTypeEnum.GOLD.equals(record.getAwardType())) {
                 orig.setAwardPic(null);
-                orig.setMetaAccessoriesId(null);
+                orig.setMetaPropId(null);
             }
             if (MetaAwardTypeEnum.NFT.equals(record.getAwardType())) {
                 orig.setGoldNum(0);
-                orig.setMetaAccessoriesId(null);
+                orig.setMetaPropId(null);
             }
-            if (MetaAwardTypeEnum.ACCESSORIES.equals(record.getAwardType())) {
+            if (MetaAwardTypeEnum.META_PROP.equals(record.getAwardType())) {
                 orig.setGoldNum(0);
                 orig.setAwardPic(null);
             }
@@ -51,7 +51,6 @@ public class MetaSignController extends BaseController {
         return metaSignRepo.save(record);
     }
 
-
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
     public Page<MetaSign> all(@RequestBody PageQuery pageQuery) {

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

@@ -7,6 +7,7 @@ import com.izouma.nineth.enums.MetaPropOperationType;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MetaUserPropRepo;
 import com.izouma.nineth.service.MetaUserPropService;
+import com.izouma.nineth.utils.SecurityUtils;
 import com.izouma.nineth.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
@@ -25,12 +26,12 @@ public class MetaUserPropController extends BaseController {
 
     @PostMapping("/receive")
     public MetaRestResult<MetaUserProp> receive(Long metaPropId) {
-        return metaUserPropService.operate(metaPropId, MetaPropOperationType.RECEIVE);
+        return metaUserPropService.operate(SecurityUtils.getAuthenticatedUser().getId(), metaPropId, MetaPropOperationType.RECEIVE);
     }
 
     @PostMapping("/use")
     public MetaRestResult<MetaUserProp> use(Long metaPropId) {
-        return metaUserPropService.operate(metaPropId, MetaPropOperationType.USE);
+        return metaUserPropService.operate(SecurityUtils.getAuthenticatedUser().getId(), metaPropId, MetaPropOperationType.USE);
     }
 
     //@PreAuthorize("hasRole('ADMIN')")

+ 231 - 229
src/main/vue/src/views/MetaSignAwardEdit.vue

@@ -1,238 +1,240 @@
 <template>
-	<div class="edit-view">
-		<page-title>
-			<el-button @click="$router.go(-1)" :disabled="saving"> 取消 </el-button>
-			<el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id"> 删除 </el-button>
-			<el-button @click="onSave" :loading="saving" type="primary"> 保存 </el-button>
-		</page-title>
-		<div class="edit-view__content-wrapper">
-			<div class="edit-view__content-section">
-				<el-form
-					:model="formData"
-					:rules="rules"
-					ref="form"
-					label-width="108px"
-					label-position="right"
-					size="small"
-					style="max-width: 500px"
-				>
-					<el-form-item prop="date" label="日期">
-						<el-date-picker v-model="formData.date" value-format="yyyy-MM" type="month" placeholder="选择月">
-						</el-date-picker>
-					</el-form-item>
-					<el-form-item prop="signNum" label="累计签到天数">
-						<el-input-number v-model="formData.signNum" :step="1" :min="1"> </el-input-number>
-						<div class="tip">输入规则:正整数,最小为1</div>
-					</el-form-item>
-					<el-form-item prop="awardType" label="奖励类型">
-						<el-select
-							v-model="formData.awardType"
-							clearable
-							filterable
-							placeholder="请选择"
-							@change="changeAwardType()"
-						>
-							<el-option
-								v-for="item in awardTypeOptions"
-								:key="item.value"
-								:label="item.label"
-								:value="item.value"
-							>
-							</el-option>
-						</el-select>
-					</el-form-item>
-					<el-form-item
-						prop="metaAccessoriesId"
-						label="配饰"
-						v-if="formData.awardType && formData.awardType === 'ACCESSORIES'"
-					>
-						<el-select
-							v-model="formData.metaAccessoriesId"
-							placeholder="请选择"
-							style="width: 100%"
-						>
-							<el-option
-								v-for="item in metaAccessories"
-								:key="item.id"
-								:label="item.name"
-								:value="item.id"
-							>
-							</el-option>
-						</el-select>
-					</el-form-item>
-					<el-form-item
-						prop="awardPic"
-						label="NFT图片"
-						v-if="formData.awardType && formData.awardType === 'NFT'"
-					>
-						<single-upload v-model="formData.awardPic"> </single-upload>
-					</el-form-item>
-					<el-form-item
-						prop="goldNum"
-						label="金币数量"
-						v-if="formData.awardType && formData.awardType === 'GOLD'"
-					>
-						<el-input-number v-model="formData.goldNum" :step="1" :min="1"> </el-input-number>
-						<div class="tip">输入规则:正整数,最小为1</div>
-					</el-form-item>
-					<el-form-item class="form-submit">
-						<el-button @click="onSave" :loading="saving" type="primary"> 保存 </el-button>
-						<el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">
-							删除
-						</el-button>
-						<el-button @click="$router.go(-1)" :disabled="saving"> 取消 </el-button>
-					</el-form-item>
-				</el-form>
-			</div>
-		</div>
-	</div>
+    <div class="edit-view">
+        <page-title>
+            <el-button @click="$router.go(-1)" :disabled="saving"> 取消 </el-button>
+            <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id"> 删除 </el-button>
+            <el-button @click="onSave" :loading="saving" type="primary"> 保存 </el-button>
+        </page-title>
+        <div class="edit-view__content-wrapper">
+            <div class="edit-view__content-section">
+                <el-form
+                    :model="formData"
+                    :rules="rules"
+                    ref="form"
+                    label-width="108px"
+                    label-position="right"
+                    size="small"
+                    style="max-width: 500px"
+                >
+                    <el-form-item prop="date" label="日期">
+                        <el-date-picker
+                            v-model="formData.date"
+                            value-format="yyyy-MM"
+                            type="month"
+                            placeholder="选择月"
+                        >
+                        </el-date-picker>
+                    </el-form-item>
+                    <el-form-item prop="signNum" label="累计签到天数">
+                        <el-input-number v-model="formData.signNum" :step="1" :min="1"> </el-input-number>
+                        <div class="tip">输入规则:正整数,最小为1</div>
+                    </el-form-item>
+                    <el-form-item prop="awardType" label="奖励类型">
+                        <el-select
+                            v-model="formData.awardType"
+                            clearable
+                            filterable
+                            placeholder="请选择"
+                            @change="changeAwardType()"
+                        >
+                            <el-option
+                                v-for="item in awardTypeOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item
+                        prop="metaPropId"
+                        label="道具"
+                        v-if="formData.awardType && formData.awardType === 'META_PROP'"
+                    >
+                        <el-select v-model="formData.metaPropId" placeholder="请选择" filterable>
+                            <el-option
+                                v-for="item in metaProps"
+                                :key="item.id"
+                                :label="item.name"
+                                :value="item.id"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item
+                        prop="awardPic"
+                        label="NFT图片"
+                        v-if="formData.awardType && formData.awardType === 'NFT'"
+                    >
+                        <single-upload v-model="formData.awardPic"> </single-upload>
+                    </el-form-item>
+                    <el-form-item
+                        prop="goldNum"
+                        label="金币数量"
+                        v-if="formData.awardType && formData.awardType === 'GOLD'"
+                    >
+                        <el-input-number v-model="formData.goldNum" :step="1" :min="1"> </el-input-number>
+                        <div class="tip">输入规则:正整数,最小为1</div>
+                    </el-form-item>
+                    <el-form-item class="form-submit">
+                        <el-button @click="onSave" :loading="saving" type="primary"> 保存 </el-button>
+                        <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">
+                            删除
+                        </el-button>
+                        <el-button @click="$router.go(-1)" :disabled="saving"> 取消 </el-button>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </div>
+    </div>
 </template>
 <script>
 import { reg } from '../util/regRules';
 export default {
-	name: 'MetaSignAwardEdit',
-	created() {
-		if (this.$route.query.id) {
-			this.$http
-				.get('metaSignAward/get/' + this.$route.query.id)
-				.then(res => {
-					this.formData = res;
-				})
-				.catch(e => {
-					console.log(e);
-					this.$message.error(e.error);
-				});
-		}
-		this.$http.get('/metaAccessories/findAll').then(res => {
-			this.metaAccessories = res;
-		});
-	},
-	data() {
-		return {
-			metaAccessories: [],
-			saving: false,
-			reg,
-			formData: {},
-			rules: {
-				date: [
-					{
-						required: true,
-						message: '请输入日期',
-						trigger: 'blur'
-					}
-				],
-				signNum: [
-					{
-						required: true,
-						message: '请输入累计签到天数',
-						trigger: 'blur'
-					},
-					{
-						validator: (rule, value, callback) => {
-							if (!this.reg.test(value)) {
-								callback(new Error('累计签到天数必须为大于1的整数'));
-								return;
-							} else {
-								callback();
-							}
-						}
-					}
-				],
-				awardType: [
-					{
-						required: true,
-						message: '请输入奖励类型',
-						trigger: 'blur'
-					}
-				],
-				metaAccessoriesId: [
-					{
-						required: true,
-						message: '请选择配饰',
-						trigger: 'blur'
-					}
-				],
-				awardPic: [
-					{
-						required: true,
-						message: '请上传NFT图片',
-						trigger: 'blur'
-					}
-				],
-				goldNum: [
-					{
-						required: true,
-						message: '请输入金币数量',
-						trigger: 'blur'
-					},
-					{
-						validator: (rule, value, callback) => {
-							if (!this.reg.test(value)) {
-								callback(new Error('金币数量必须为大于1的整数'));
-								return;
-							} else {
-								callback();
-							}
-						}
-					}
-				]
-			},
-			awardTypeOptions: [
-				{ label: '配饰', value: 'ACCESSORIES' },
-				{ label: 'NFT', value: 'NFT' },
-				{ label: '金币', value: 'GOLD' }
-			]
-		};
-	},
-	methods: {
-		changeAwardType() {
-			this.$delete(this.formData, 'metaAccessoriesId');
-			this.$delete(this.formData, 'awardPic');
-			this.$delete(this.formData, 'goldNum');
-		},
-		onSave() {
-			this.$refs.form.validate(valid => {
-				if (valid) {
-					this.submit();
-				} else {
-					return false;
-				}
-			});
-		},
-		submit() {
-			let data = { ...this.formData };
+    name: 'MetaSignAwardEdit',
+    created() {
+        if (this.$route.query.id) {
+            this.$http
+                .get('metaSignAward/get/' + this.$route.query.id)
+                .then(res => {
+                    this.formData = res;
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+        }
+        this.$http.get('/metaProp/findAll').then(res => {
+            this.metaProps = res;
+        });
+    },
+    data() {
+        return {
+            metaProps: [],
+            saving: false,
+            reg,
+            formData: {},
+            rules: {
+                date: [
+                    {
+                        required: true,
+                        message: '请输入日期',
+                        trigger: 'blur'
+                    }
+                ],
+                signNum: [
+                    {
+                        required: true,
+                        message: '请输入累计签到天数',
+                        trigger: 'blur'
+                    },
+                    {
+                        validator: (rule, value, callback) => {
+                            if (!this.reg.test(value)) {
+                                callback(new Error('累计签到天数必须为大于1的整数'));
+                                return;
+                            } else {
+                                callback();
+                            }
+                        }
+                    }
+                ],
+                awardType: [
+                    {
+                        required: true,
+                        message: '请输入奖励类型',
+                        trigger: 'blur'
+                    }
+                ],
+                metaPropId: [
+                    {
+                        required: true,
+                        message: '请选择道具',
+                        trigger: 'blur'
+                    }
+                ],
+                awardPic: [
+                    {
+                        required: true,
+                        message: '请上传NFT图片',
+                        trigger: 'blur'
+                    }
+                ],
+                goldNum: [
+                    {
+                        required: true,
+                        message: '请输入金币数量',
+                        trigger: 'blur'
+                    },
+                    {
+                        validator: (rule, value, callback) => {
+                            if (!this.reg.test(value)) {
+                                callback(new Error('金币数量必须为大于1的整数'));
+                                return;
+                            } else {
+                                callback();
+                            }
+                        }
+                    }
+                ]
+            },
+            awardTypeOptions: [
+				{ label: '金币', value: 'GOLD' },
+				{ label: '元宇宙道具', value: 'META_PROP' },
+                { label: 'NFT', value: 'NFT' }
+                
+            ]
+        };
+    },
+    methods: {
+        changeAwardType() {
+            this.$delete(this.formData, 'metaPropId');
+            this.$delete(this.formData, 'awardPic');
+            this.$delete(this.formData, 'goldNum');
+        },
+        onSave() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let data = { ...this.formData };
 
-			this.saving = true;
-			this.$http
-				.post('/metaSignAward/save', data, { body: 'json' })
-				.then(res => {
-					this.saving = false;
-					this.$message.success('成功');
-					this.$router.go(-1);
-				})
-				.catch(e => {
-					console.log(e);
-					this.saving = false;
-					this.$message.error(e.error);
-				});
-		},
-		onDelete() {
-			this.$confirm('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
-				.then(() => {
-					return this.$http.post(`/metaSignAward/del/${this.formData.id}`);
-				})
-				.then(() => {
-					this.$message.success('删除成功');
-					this.$router.go(-1);
-				})
-				.catch(e => {
-					if (e !== 'cancel') {
-						console.log(e);
-						this.$message.error((e || {}).error || '删除失败');
-					}
-				});
-		}
-	}
+            this.saving = true;
+            this.$http
+                .post('/metaSignAward/save', data, { body: 'json' })
+                .then(res => {
+                    this.saving = false;
+                    this.$message.success('成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
+        },
+        onDelete() {
+            this.$confirm('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/metaSignAward/del/${this.formData.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error((e || {}).error || '删除失败');
+                    }
+                });
+        }
+    }
 };
 </script>
 <style lang="less" scoped>

+ 4 - 4
src/main/vue/src/views/MetaSignAwardList.vue

@@ -48,7 +48,7 @@
 			<el-table-column prop="signNum" align="center" label="累计签到次数"> </el-table-column>
 			<el-table-column prop="awardType" align="center" label="奖励类型" :formatter="awardTypeFormatter">
 			</el-table-column>
-			<el-table-column prop="metaAccessoriesId" align="center" label="配饰"> </el-table-column>
+			<el-table-column prop="metaPropId" align="center" label="道具"> </el-table-column>
 			<el-table-column prop="awardPic" align="center" label="NFT图片">
 				<template slot-scope="{ row }">
 					<template v-if="row.awardType && row.awardType === 'NFT'">
@@ -107,9 +107,9 @@ export default {
 			url: '/metaSignAward/all',
 			downloading: false,
 			awardTypeOptions: [
-				{ label: '配饰', value: 'ACCESSORIES' },
-				{ label: 'NFT', value: 'NFT' },
-				{ label: '金币', value: 'GOLD' }
+				{ label: '金币', value: 'GOLD' },
+				{ label: '元宇宙道具', value: 'META_PROP' },
+                { label: 'NFT', value: 'NFT' }
 			]
 		};
 	},

+ 20 - 20
src/main/vue/src/views/MetaSignEdit.vue

@@ -52,13 +52,13 @@
 						</el-select>
 					</el-form-item>
 					<el-form-item
-						prop="metaAccessoriesId"
-						label="配饰"
-						v-if="formData.awardType && formData.awardType === 'ACCESSORIES'"
+						prop="metaPropId"
+						label="道具"
+						v-if="formData.awardType && formData.awardType === 'META_PROP'"
 					>
-						<el-select v-model="formData.metaAccessoriesId" placeholder="请选择" style="width: 100%">
+						<el-select v-model="formData.metaPropId" placeholder="请选择" filterable>
 							<el-option
-								v-for="item in metaAccessories"
+								v-for="item in metaProps"
 								:key="item.id"
 								:label="item.name"
 								:value="item.id"
@@ -109,13 +109,13 @@ export default {
 					this.$message.error(e.error);
 				});
 		}
-		this.$http.get('/metaAccessories/findAll').then(res => {
-			this.metaAccessories = res;
-		});
+		this.$http.get('/metaProp/findAll').then(res => {
+            this.metaProps = res;
+        });
 	},
 	data() {
 		return {
-			metaAccessories: [],
+			metaProps: [],
 			saving: false,
 			reg,
 			formData: {},
@@ -141,13 +141,13 @@ export default {
 						trigger: 'blur'
 					}
 				],
-				metaAccessoriesId: [
-					{
-						required: true,
-						message: '请选择配饰',
-						trigger: 'blur'
-					}
-				],
+				metaPropId: [
+                    {
+                        required: true,
+                        message: '请选择道具',
+                        trigger: 'blur'
+                    }
+                ],
 				awardPic: [
 					{
 						required: true,
@@ -174,15 +174,15 @@ export default {
 				]
 			},
 			awardTypeOptions: [
-				{ label: '配饰', value: 'ACCESSORIES' },
-				{ label: 'NFT', value: 'NFT' },
-				{ label: '金币', value: 'GOLD' }
+				{ label: '金币', value: 'GOLD' },
+				{ label: '元宇宙道具', value: 'META_PROP' },
+                { label: 'NFT', value: 'NFT' }
 			]
 		};
 	},
 	methods: {
 		changeAwardType() {
-			this.$delete(this.formData, 'metaAccessoriesId');
+			this.$delete(this.formData, 'metaPropId');
 			this.$delete(this.formData, 'awardPic');
 			this.$delete(this.formData, 'goldNum');
 		},

+ 4 - 4
src/main/vue/src/views/MetaSignList.vue

@@ -48,7 +48,7 @@
             <el-table-column prop="signRule" align="center" label="规则详情"> </el-table-column>
 			<el-table-column prop="awardType" align="center" label="每日签到奖励类型" :formatter="awardTypeFormatter">
 			</el-table-column>
-			<el-table-column prop="metaAccessoriesId" align="center" label="配饰"> </el-table-column>
+			<el-table-column prop="metaPropId" align="center" label="道具"> </el-table-column>
 			<el-table-column prop="awardPic" align="center" label="NFT图片">
 				<template slot-scope="{ row }">
 					<template v-if="row.awardType && row.awardType === 'NFT'">
@@ -107,9 +107,9 @@ export default {
 			url: '/metaSign/all',
 			downloading: false,
 			awardTypeOptions: [
-				{ label: '配饰', value: 'ACCESSORIES' },
-				{ label: 'NFT', value: 'NFT' },
-				{ label: '金币', value: 'GOLD' }
+				{ label: '金币', value: 'GOLD' },
+				{ label: '元宇宙道具', value: 'META_PROP' },
+                { label: 'NFT', value: 'NFT' }
 			]
 		};
 	},

+ 11 - 6
src/main/vue/src/views/MetaUserPropList.vue

@@ -38,13 +38,18 @@
 			<el-table-column prop="userId" label="用户id"> </el-table-column>
 			<el-table-column prop="metaPropId" label="道具id"> </el-table-column>
 			<el-table-column prop="name" label="名称"> </el-table-column>
-			<el-table-column prop="pic" label="图片"> </el-table-column>
+			<el-table-column prop="pic" label="图片">
+                <template slot-scope="{ row }">
+                    <el-image
+                        style="width: 30px; height: 30px"
+                        :src="row.pic"
+                        fit="cover"
+                        :preview-src-list="[row.pic]"
+                    >
+                    </el-image>
+                </template>
+            </el-table-column>
 			<el-table-column prop="num" label="数量"> </el-table-column>
-			<!-- <el-table-column label="操作" align="center" fixed="right" width="150">
-				<template slot-scope="{ row }">
-					<el-button @click="editRow(row)" type="primary" size="mini" plain> 编辑 </el-button>
-				</template>
-			</el-table-column> -->
 		</el-table>
 		<div class="pagination-wrapper">
 			<el-pagination