Browse Source

元宇宙僵尸调整

sunkean 3 năm trước cách đây
mục cha
commit
7c473beddd

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

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

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

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

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

@@ -0,0 +1,42 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.converter.MetaGameAwardListConverter;
+import com.izouma.nineth.enums.MetaGame;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙游戏阶段奖励")
+public class MetaGameStageAward extends BaseEntity {
+
+    @ApiModelProperty("游戏名称")
+    @Enumerated(EnumType.STRING)
+    private MetaGame gameName;
+
+    @ApiModelProperty("开始计算时间")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty("结束计算时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty("积分开始")
+    private int start;
+
+    @ApiModelProperty("积分结束")
+    private int endLevel;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = MetaGameAwardListConverter.class)
+    @ApiModelProperty("奖励配置")
+    private List<MetaGameAward> metaGameAwards;
+}

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

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

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

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

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

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

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

@@ -1,6 +1,7 @@
 package com.izouma.nineth.web;
 
 import com.izouma.nineth.domain.MetaGameCopy;
+import com.izouma.nineth.domain.MetaGameProcess;
 import com.izouma.nineth.domain.MetaZombie;
 import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
@@ -8,6 +9,7 @@ import com.izouma.nineth.enums.GameCopyType;
 import com.izouma.nineth.enums.MetaGame;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MetaGameCopyRepo;
+import com.izouma.nineth.repo.MetaGameProcessRepo;
 import com.izouma.nineth.repo.MetaZombieRepo;
 import com.izouma.nineth.service.MetaGameCopyService;
 import com.izouma.nineth.utils.ObjUtils;
@@ -34,6 +36,8 @@ public class MetaGameCopyController extends BaseController {
 
     private MetaZombieRepo metaZombieRepo;
 
+    private MetaGameProcessRepo metaGameProcessRepo;
+
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     public MetaGameCopy save(@RequestBody MetaGameCopy record) {
@@ -87,6 +91,7 @@ public class MetaGameCopyController extends BaseController {
     public void delMetaZombieId(@PathVariable Long metaZombieId) {
         metaGameCopyService.delMetaZombieId(metaZombieId);
     }
+
     @GetMapping("/excel")
     @ResponseBody
     public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
@@ -114,5 +119,14 @@ public class MetaGameCopyController extends BaseController {
         return MetaRestResult.returnSuccess(metaGameCopy);
     }
 
+    @PostMapping("/saveProcess")
+    public MetaRestResult<MetaGameProcess> saveProcess(@RequestBody MetaGameProcess metaGameProcess) {
+        return metaGameCopyService.saveProcess(metaGameProcess);
+    }
+
+    @GetMapping("/{userId}/{metaGameCopyId}/whetherDisConnected")
+    public MetaRestResult<Boolean> whetherDisConnected(@PathVariable Long userId, @PathVariable Long metaGameCopyId) {
+        return MetaRestResult.returnSuccess(metaGameProcessRepo.findDisconnected(userId, metaGameCopyId));
+    }
 }