xiongzhu 3 vuotta sitten
vanhempi
commit
2e46dfbc61

+ 58 - 0
src/main/java/com/izouma/yags/camp/api/CampApiService.java

@@ -0,0 +1,58 @@
+package com.izouma.yags.camp.api;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.izouma.yags.domain.CampToken;
+import com.izouma.yags.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.List;
+
+@Service
+@Slf4j
+public class CampApiService {
+
+    private CampToken getCampToken() {
+        CampToken campToken = new CampToken();
+        campToken.setUserId("436174868");
+        campToken.setToken("EA8fkgWs");
+        return campToken;
+    }
+
+    public List<RongYaoRole> getRoleItems(String userId) throws IOException {
+        OkHttpClient client = new OkHttpClient();
+        CampToken token = getCampToken();
+        RequestBody formBody = new FormBody.Builder()
+                .add("friendUserId", userId)
+                .add("gameId", "20001")
+                .add("token", token.getToken())
+                .add("userId", token.getUserId())
+                .build();
+        Request request = new Request.Builder()
+                .addHeader("userId", token.getUserId())
+                .addHeader("token", token.getToken())
+                .url("https://ssl.kohsocialapp.qq.com:10001/game/battleprofile")
+                .post(formBody)
+                .build();
+        try (Response response = client.newCall(request).execute()) {
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String body = responseBody.string();
+                JSONObject res = JSON.parseObject(body);
+                int returnCode = res.getInteger("returnCode");
+                if (res.getInteger("returnCode") == 0) {
+                    QueryRole data = res.getObject("data", QueryRole.class);
+                    return data.getRolelist();
+                } else {
+                    String msg = res.getString("returnMsg");
+                    log.error("获取角色列表失败, returnCode={}, msg={}", returnCode, msg);
+                    throw new BusinessException("查询游戏角色失败");
+                }
+            }
+        }
+        throw new BusinessException("查询游戏角色失败");
+    }
+}

+ 2 - 2
src/main/java/com/izouma/yags/camp/api/QueryRole.java

@@ -6,8 +6,8 @@ import java.util.List;
 
 @Data
 public class QueryRole {
-    private List<RoleItem> rolelist;
-    private List<Object>   shortCut;
+    private List<RongYaoRole> rolelist;
+    private List<Object>      shortCut;
     private Rolecard       rolecard;
     private Matchlist      matchlist;
     private List<Object>   battleCard;

+ 1 - 1
src/main/java/com/izouma/yags/camp/api/RoleItem.java → src/main/java/com/izouma/yags/camp/api/RongYaoRole.java

@@ -5,7 +5,7 @@ import lombok.Data;
 import java.util.List;
 
 @Data
-public class RoleItem {
+public class RongYaoRole {
     private Integer      serverStatus;
     private Object       medalInfo;
     private String       icon;

+ 24 - 0
src/main/java/com/izouma/yags/camp/api/RongYaoRoleConverter.java

@@ -0,0 +1,24 @@
+package com.izouma.yags.camp.api;
+
+import com.alibaba.fastjson.JSON;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+
+public class RongYaoRoleConverter implements AttributeConverter<RongYaoRole, String> {
+    @Override
+    public String convertToDatabaseColumn(RongYaoRole rongYaoRole) {
+        if (rongYaoRole == null) {
+            return null;
+        }
+        return JSON.toJSONString(rongYaoRole);
+    }
+
+    @Override
+    public RongYaoRole convertToEntityAttribute(String s) {
+        if (StringUtils.isBlank(s)) {
+            return null;
+        }
+        return JSON.parseObject(s, RongYaoRole.class);
+    }
+}

+ 7 - 7
src/main/java/com/izouma/yags/domain/BindGame.java

@@ -1,14 +1,13 @@
 package com.izouma.yags.domain;
 
+import com.izouma.yags.camp.api.RongYaoRole;
+import com.izouma.yags.camp.api.RongYaoRoleConverter;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import javax.persistence.Entity;
-import javax.persistence.Index;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
+import javax.persistence.*;
 
 @Data
 @Table(uniqueConstraints = {
@@ -24,10 +23,11 @@ public class BindGame extends BaseEntity {
 
     private Long gameId;
 
-    private String nickname;
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = RongYaoRoleConverter.class)
+    private RongYaoRole rongYaoRole;
 
-    public BindGame(Long userId, Long gameId) {
+    public BindGame(Long userId) {
         this.userId = userId;
-        this.gameId = gameId;
     }
 }

+ 19 - 0
src/main/java/com/izouma/yags/domain/CampToken.java

@@ -0,0 +1,19 @@
+package com.izouma.yags.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+public class CampToken extends BaseEntity {
+
+    private String userId;
+
+    private String token;
+
+}

+ 17 - 0
src/main/java/com/izouma/yags/domain/GameRole.java

@@ -0,0 +1,17 @@
+package com.izouma.yags.domain;
+
+public class GameRole<T> {
+    private T role;
+
+    public GameRole(T role) {
+        this.role = role;
+    }
+
+    public T getRole() {
+        return role;
+    }
+
+    public void setRole(T role) {
+        this.role = role;
+    }
+}

+ 11 - 0
src/main/java/com/izouma/yags/dto/BindGameRequest.java

@@ -0,0 +1,11 @@
+package com.izouma.yags.dto;
+
+import com.izouma.yags.camp.api.RongYaoRole;
+import lombok.Data;
+
+@Data
+public class BindGameRequest {
+    private Long        gameId;
+    private String      campId;
+    private RongYaoRole rongYaoRole;
+}

+ 51 - 0
src/main/java/com/izouma/yags/service/BindGameService.java

@@ -0,0 +1,51 @@
+package com.izouma.yags.service;
+
+import com.izouma.yags.camp.api.CampApiService;
+import com.izouma.yags.camp.api.RongYaoRole;
+import com.izouma.yags.domain.BindGame;
+import com.izouma.yags.exception.BusinessException;
+import com.izouma.yags.repo.BindGameRepo;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@Service
+@AllArgsConstructor
+@Slf4j
+public class BindGameService {
+    private CampApiService campApiService;
+    private BindGameRepo   bindGameRepo;
+
+    public Object bind(Long userId, Long gameId, String campId, String roleId) throws IOException {
+        Objects.requireNonNull(gameId);
+        Objects.requireNonNull(campId);
+        if (gameId == 21) {
+            Map<String, Object> map = new HashMap<>();
+            List<RongYaoRole> roleItems = campApiService.getRoleItems(campId);
+            if (roleItems.size() == 0) {
+                throw new BusinessException("未查询到游戏角色");
+            }
+            if (roleId == null) {
+                map.put("code", 1);
+                map.put("msg", "请选择角色");
+                map.put("roleItems", roleItems);
+            } else {
+                BindGame bindGame = bindGameRepo.findByUserIdAndGameId(userId, gameId)
+                        .orElse(new BindGame(userId));
+                bindGame.setGameId(gameId);
+                bindGame.setRongYaoRole(roleItems.stream().filter(r -> r.getRoleId().equals(roleId))
+                        .findFirst().orElseThrow(new BusinessException("未查询到游戏角色")));
+                bindGameRepo.save(bindGame);
+                map.put("code", 0);
+            }
+            return map;
+        }
+        throw new BusinessException("暂不支持该游戏");
+    }
+}

+ 1 - 1
src/main/java/com/izouma/yags/service/RoomService.java

@@ -101,7 +101,7 @@ public class RoomService {
                 .joinAt(LocalDateTime.now())
                 .status(JoinRoomStatus.WAITING)
                 .team("host")
-                .gameNickname(Optional.ofNullable(bindGame).map(BindGame::getNickname).orElse(null))
+//                .gameNickname(Optional.ofNullable(bindGame).map(BindGame::getNickname).orElse(null))
                 .build());
 
         ticket.setUsed(true);

+ 3 - 4
src/main/java/com/izouma/yags/service/UserService.java

@@ -304,10 +304,9 @@ public class UserService {
         return userRepo.save(oldUser);
     }
 
-    public BindGame bindGame(Long userId, Long gameId, String nickname) {
-        BindGame bindGame = bindGameRepo.findByUserIdAndGameId(userId, gameId).orElse(new BindGame(userId, gameId));
-        bindGame.setNickname(nickname);
-        return bindGameRepo.save(bindGame);
+    public Map<String,Object> bindGame(Long userId, Long gameId, String campId) {
+
+        return null;
     }
 
     public List<BindGame> getBindGame(Long userId) {

+ 23 - 0
src/main/java/com/izouma/yags/web/BindGameController.java

@@ -0,0 +1,23 @@
+package com.izouma.yags.web;
+
+import com.izouma.yags.service.BindGameService;
+import com.izouma.yags.utils.SecurityUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+
+@RestController
+@RequestMapping("/bindGame")
+@AllArgsConstructor
+public class BindGameController extends BaseController {
+    private BindGameService bindGameService;
+
+    @GetMapping("/bind")
+    public Object bind(@RequestParam Long gameId, @RequestParam String campId, String roleId) throws IOException {
+        return bindGameService.bind(SecurityUtils.getAuthenticatedUser().getId(), gameId, campId, roleId);
+    }
+}

+ 6 - 5
src/main/java/com/izouma/yags/web/UserController.java

@@ -9,19 +9,20 @@ import com.izouma.yags.dto.UserRegister;
 import com.izouma.yags.enums.AuthorityName;
 import com.izouma.yags.exception.BusinessException;
 import com.izouma.yags.repo.BalanceRecordRepo;
-import com.izouma.yags.repo.UserBalanceRepo;
 import com.izouma.yags.repo.UserRepo;
 import com.izouma.yags.security.Authority;
 import com.izouma.yags.security.JwtTokenUtil;
 import com.izouma.yags.security.JwtUserFactory;
-import com.izouma.yags.service.UserBalanceService;
 import com.izouma.yags.service.UserService;
 import com.izouma.yags.utils.ObjUtils;
 import com.izouma.yags.utils.SecurityUtils;
 import com.izouma.yags.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.data.domain.*;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.web.bind.annotation.*;
@@ -159,8 +160,8 @@ public class UserController extends BaseController {
     }
 
     @PostMapping("/bindGame")
-    public BindGame bindGame(@RequestParam Long gameId, @RequestParam String nickname) {
-        return userService.bindGame(SecurityUtils.getAuthenticatedUser().getId(), gameId, nickname);
+    public Object bindGame(@RequestParam Long gameId, @RequestParam String campId) {
+        return userService.bindGame(SecurityUtils.getAuthenticatedUser().getId(), gameId, campId);
     }
 
     @GetMapping("/bindGame/list")

+ 5 - 6
src/test/java/com/izouma/yags/CommonTest.java

@@ -4,9 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.github.kevinsawicki.http.HttpRequest;
-import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
-import com.izouma.yags.camp.api.ApiResponse;
 import com.izouma.yags.camp.api.QueryRole;
 import com.izouma.yags.dto.RaexUser;
 import com.izouma.yags.exception.BusinessException;
@@ -119,7 +117,7 @@ public class CommonTest {
         RequestBody formBody = new FormBody.Builder()
                 .add("friendUserId", "377195948")
                 .add("gameId", "20001")
-                .add("token", "YGyWAchJ")
+                .add("token", "EA8fkgWs")
                 .add("userId", "436174868")
                 .build();
         Request request = new Request.Builder()
@@ -131,9 +129,10 @@ public class CommonTest {
         try (Response response = client.newCall(request).execute()) {
             Gson gson = new Gson();
             String body = response.body().string();
-            ApiResponse<QueryRole> res = gson.fromJson(body, new TypeToken<ApiResponse<QueryRole>>() {
-            }.getType());
-            System.out.println(JSON.toJSONString(res, true));
+            System.out.println(body);
+            JSONObject jsonObject = JSON.parseObject(body);
+            QueryRole data = jsonObject.getObject("data", QueryRole.class);
+            System.out.println(data);
         } catch (IOException e) {
             throw new RuntimeException(e);
         }