xiongzhu 3 лет назад
Родитель
Сommit
de7d55b0e5

+ 5 - 0
pom.xml

@@ -346,6 +346,11 @@
             <groupId>com.squareup.okhttp3</groupId>
             <artifactId>okhttp</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>logging-interceptor</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

+ 102 - 0
src/main/java/com/izouma/yags/camp/api/AcntcampItem.java

@@ -0,0 +1,102 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AcntcampItem {
+    private String                   totalBeHurtedCntPerMin;
+    private String                   heroIcon;
+    private List<HeroScoreGradeItem> heroScoreGrade;
+    private Integer                  heroId;
+    private String                   gradeGame;
+    private String                   newBattle;
+    private String                   heroSkillIcon;
+    private String                   oldMasterMatchScore;
+    private String                   battleRoyaleGrade;
+    private String                   gradeLevel;
+    private String                   newKDA;
+    private String                   loseMvp;
+    private String                   sabcKDA;
+    private Double                   avgMvpScore;
+    private String                   killCnt;
+    private String                   battleRoyaleTotalTeamNum;
+    private String                   gameServerId;
+    private String                   totalHurtPercent;
+    private String                   hero1UltraKillCnt;
+    private String                   newGrow;
+    private String                   deadCnt;
+    private Integer                  maxKill;
+    private String                   totalBeHurtedCntPercent;
+    private String                   totalbeherohurtcnt;
+    private Integer                  totalWinNum;
+    private String                   battleRoyaleGrowValue;
+    private String                   matchShareDesc;
+    private Integer                  maxTower;
+    private String                   sevenKill;
+    private String                   totalbehurtcnt;
+    private String                   newSurvive;
+    private String                   gametype;
+    private String                   roleName;
+    private String                   vopenid;
+    private String                   sixKill;
+    private List<Object>             pveEquipInfo;
+    private Integer                  maxAssist;
+    private String                   gameScore;
+    private String                   heroName;
+    private List<Object>             pveTalentInfo;
+    private String                   totalOutputPerMin;
+    private Integer                  isSelf;
+    private String                   totalhurtcnt;
+    private Object                   jumpType;
+    private String                   newHurtHero;
+    private Integer                  maxBeHurt;
+    private String                   evaluateUrl;
+    private String                   heroId2;
+    private String                   acntcamp;
+    private String                   totalHurtHeroCntPercent;
+    private String                   battleRoyaleTimeToLive;
+    private String                   totalHurtHeroCntPerMin;
+    private String                   totalhurtherocnt;
+    private String                   hero2SkillIcon;
+    private String                   hero1GhostLevel;
+    private Integer                  maxHurt;
+    private String                   pveRateLvl;
+    private Integer                  isFriend;
+    private Integer                  branchEvaluate;
+    private String                   teamNum;
+    private String                   playerId;
+    private String                   hero1TripleKillCnt;
+    private String                   winMvp;
+    private String                   sabcgrow;
+    private String                   hero2SkillID;
+    private String                   defeatAcntRatio;
+    private List<EquipmentInfoItem>  finalHero2EquipmentInfo;
+    private String                   hornorPercent;
+    private String                   roleId;
+    private String                   heroSkillID;
+    private Object                   hero2Icon;
+    private Integer                  vest;
+    private List<EquipmentInfoItem>  finalEquipmentInfo;
+    private String                   hero1RampageCnt;
+    private String                   sabcsurvive;
+    private String                   battleRoyaleEvaluate;
+    private Integer                  userId;
+    private String                   usedtime;
+    private Integer                  maxMvpScore;
+    private Integer                  gradeLevelId;
+    private String                   heroPosition;
+    private String                   godLikeCnt;
+    private String                   sabchurtHero;
+    private Integer                  totalLostNum;
+    private String                   hero2GhostLevel;
+    private String                   newMasterMatchScore;
+    private String                   eightKill;
+    private Integer                  isMI;
+    private String                   sabcbattle;
+    private String                   assistCnt;
+    private String                   disGradeLevelId;
+    private String                   joinGamePercent;
+    private String                   evaluateUrlForRole;
+}

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

@@ -3,10 +3,10 @@ package com.izouma.yags.camp.api;
 import lombok.Data;
 
 @Data
-public class ApiResponse<T> {
+public class ApiResponse {
     private Integer result;
     private Integer returnCode;
     private String  returnMsg;
-    private T       data;
+    private Object  data;
     private String  time;
 }

+ 11 - 0
src/main/java/com/izouma/yags/camp/api/BanHeroInfo.java

@@ -0,0 +1,11 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class BanHeroInfo {
+    private List<CampItem> camp1;
+    private List<CampItem> camp2;
+}

+ 54 - 0
src/main/java/com/izouma/yags/camp/api/Battle.java

@@ -0,0 +1,54 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+@Data
+public class Battle {
+    private Integer winNum;
+    private String  evaluateUrl;
+    private Integer acntCamp;
+    private String  heroIcon;
+    private Integer playerRank;
+    private Integer killcnt;
+    private Integer heroId;
+    private Integer deadcnt;
+    private Integer oldMasterMatchScore;
+    private String  analyseUrl;
+    private Integer mvpcnt;
+    private Integer assistcnt;
+    private Integer pveRateLvl;
+    private String  gameSeq;
+    private String  mapName;
+    private Integer teamNum;
+    private String  gameSvrId;
+    private Integer branchEvaluate;
+    private Integer winCamp;
+    private Integer hero1TripleKillCnt;
+    private String  gametime;
+    private Integer firstBlood;
+    private Integer hero1UltraKillCnt;
+    private String  chessIds;
+    private String  relaySvrId;
+    private Integer battleRoyaleEvaluate;
+    private Integer hero1RampageCnt;
+    private Integer stars;
+    private Integer pvpType;
+    private Integer rampage;
+    private Integer multiCampRank;
+    private Integer godLikeCnt;
+    private Integer gameresult;
+    private Integer usedTime;
+    private Integer failNum;
+    private Integer sevenKill;
+    private String  roleJobName;
+    private String  battleDetailUrl;
+    private Integer newMasterMatchScore;
+    private Integer roleJob;
+    private Integer gametype;
+    private Integer sixKill;
+    private String  dtEventTime;
+    private String  detailUrl;
+    private Integer battleType;
+    private Integer losemvp;
+    private String  desc;
+}

+ 83 - 7
src/main/java/com/izouma/yags/camp/api/CampApiService.java

@@ -6,6 +6,7 @@ import com.izouma.yags.domain.CampToken;
 import com.izouma.yags.exception.BusinessException;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
+import okhttp3.logging.HttpLoggingInterceptor;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
@@ -15,6 +16,21 @@ import java.util.List;
 @Slf4j
 public class CampApiService {
 
+    private volatile OkHttpClient client;
+
+    private OkHttpClient getClient() {
+        if (client == null) {
+            synchronized (CampApiService.class) {
+                if (client == null) {
+                    client = new OkHttpClient.Builder()
+                            .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
+                            .build();
+                }
+            }
+        }
+        return client;
+    }
+
     private CampToken getCampToken() {
         CampToken campToken = new CampToken();
         campToken.setUserId("436174868");
@@ -37,22 +53,82 @@ public class CampApiService {
                 .url("https://ssl.kohsocialapp.qq.com:10001/game/battleprofile")
                 .post(formBody)
                 .build();
-        try (Response response = client.newCall(request).execute()) {
+        try (Response response = getClient().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);
+                ApiResponse res = JSON.parseObject(body, ApiResponse.class);
+                if (res.getReturnCode() == 0) {
+                    QueryRole data = ((JSONObject) res.getData()).toJavaObject(QueryRole.class);
                     return data.getRolelist();
                 } else {
-                    String msg = res.getString("returnMsg");
-                    log.error("获取角色列表失败, returnCode={}, msg={}", returnCode, msg);
+                    log.error("获取角色列表失败, returnCode={}, msg={}", res.getReturnCode(), res.getReturnMsg());
                     throw new BusinessException("查询游戏角色失败");
                 }
             }
         }
         throw new BusinessException("查询游戏角色失败");
     }
+
+    public QueryBattle queryBattle(String roleId) throws IOException {
+        CampToken token = getCampToken();
+        JSONObject content = new JSONObject();
+        content.put("friendRoleId", roleId);
+        content.put("userId", token.getUserId());
+        Request request = new Request.Builder()
+                .addHeader("userId", token.getUserId())
+                .addHeader("token", token.getToken())
+                .url("https://kohcamp.qq.com/game/morebattlelist")
+                .post(RequestBody.create(MediaType.parse("application/json"), content.toJSONString()))
+                .build();
+        try (Response response = getClient().newCall(request).execute()) {
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String body = responseBody.string();
+                ApiResponse res = JSON.parseObject(body, ApiResponse.class);
+                if (res.getReturnCode() == 0) {
+                    QueryBattle data = ((JSONObject) res.getData()).toJavaObject(QueryBattle.class);
+                    return data;
+                } else {
+                    log.error("查询对战信息失败, returnCode={}, msg={}", res.getReturnCode(), res.getReturnMsg());
+                    throw new BusinessException("查询对战信息失败");
+                }
+            }
+        }
+        throw new BusinessException("查询对战信息失败");
+    }
+
+    public QueryBattleDetail queryBattleDetail(String gameSeq, String gameSvrId, Integer pvpType, String toAppRoleId, String relaySvrId) throws IOException {
+        CampToken token = getCampToken();
+        RequestBody content = new FormBody.Builder()
+                .add("gameSeq", gameSeq)
+                .add("gameSvrId", gameSvrId)
+                .add("pvpType", pvpType.toString())
+                .add("toAppRoleId", toAppRoleId)
+                .add("relaySvrId", relaySvrId)
+                .add("userId", token.getUserId())
+                .add("token", token.getToken())
+                .build();
+        Request request = new Request.Builder()
+                .addHeader("userId", token.getUserId())
+                .addHeader("token", token.getToken())
+                .url("https://ssl.kohsocialapp.qq.com:10001/role/h5getplaydetail")
+                .post(content)
+                .build();
+        try (Response response = getClient().newCall(request).execute()) {
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String body = responseBody.string();
+                ApiResponse res = JSON.parseObject(body, ApiResponse.class);
+                if (res.getReturnCode() == 0) {
+                    QueryBattleDetail data = ((JSONObject) res.getData()).toJavaObject(QueryBattleDetail.class);
+                    return data;
+                } else {
+                    log.error("查询对战信息失败, returnCode={}, msg={}", res.getReturnCode(), res.getReturnMsg());
+                    throw new BusinessException("查询对战信息失败");
+                }
+            }
+        }
+        throw new BusinessException("查询对战信息失败");
+    }
 }

+ 10 - 0
src/main/java/com/izouma/yags/camp/api/CampItem.java

@@ -0,0 +1,10 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+@Data
+public class CampItem {
+	private String campId;
+	private String heroIcon;
+	private String heroId;
+}

+ 8 - 0
src/main/java/com/izouma/yags/camp/api/EquipmentInfoItem.java

@@ -0,0 +1,8 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+@Data
+public class EquipmentInfoItem {
+    private Integer equId;
+}

+ 12 - 0
src/main/java/com/izouma/yags/camp/api/H5TeamAnaParam.java

@@ -0,0 +1,12 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+@Data
+public class H5TeamAnaParam {
+    private String gameSvrEntity;
+    private String openid;
+    private String relaySvrEntity;
+    private String gameSeq;
+    private String playerID;
+}

+ 10 - 0
src/main/java/com/izouma/yags/camp/api/HeroScoreGradeItem.java

@@ -0,0 +1,10 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+@Data
+public class HeroScoreGradeItem {
+    private String letter;
+    private String name;
+    private String base;
+}

+ 9 - 0
src/main/java/com/izouma/yags/camp/api/OptionsItem.java

@@ -0,0 +1,9 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+@Data
+public class OptionsItem{
+	private String value;
+	private Integer key;
+}

+ 20 - 0
src/main/java/com/izouma/yags/camp/api/QueryBattle.java

@@ -0,0 +1,20 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class QueryBattle {
+    private String            lastTime;
+    private Integer           straightWin;
+    private Object            gaming;
+    private Integer           straightLose;
+    private Boolean           isGaming;
+    private String            invisDes;
+    private Boolean           hasMore;
+    private List<OptionsItem> options;
+    private Boolean           invisible;
+    private List<Battle>      list;
+    private String            returnTime;
+}

+ 28 - 0
src/main/java/com/izouma/yags/camp/api/QueryBattleDetail.java

@@ -0,0 +1,28 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class QueryBattleDetail {
+    private TeamData           dataRed;
+    private TeamData           dataBlue;
+    private List<AcntcampItem> acntcampRed;
+    private List<AcntcampItem> acntcampBlue;
+    private String             pvpTypename;
+    private Integer            sNum;
+    private H5TeamAnaParam     h5TeamAnaParam;
+    private String             equiDetailUrl;
+    private TarRoleSimpleInfo  tarRoleSimpleInfo;
+    private String             eventtime;
+    private String             myPlayCamp;
+    private Integer            usedtime;
+    private String             heroUrl;
+    private BanHeroInfo        banHeroInfo;
+    private String             analyseUrl;
+    private String             equipmentUrl;
+    private Integer            hideDetail;
+    private Integer            battleType;
+    private String             mapName;
+}

+ 13 - 0
src/main/java/com/izouma/yags/camp/api/TarRoleSimpleInfo.java

@@ -0,0 +1,13 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+@Data
+public class TarRoleSimpleInfo {
+    private Integer roleId;
+    private String  roleIcon;
+    private String  roleName;
+    private Integer job;
+    private Integer userId;
+    private String  playerId;
+}

+ 14 - 0
src/main/java/com/izouma/yags/camp/api/TeamData.java

@@ -0,0 +1,14 @@
+package com.izouma.yags.camp.api;
+
+import lombok.Data;
+
+@Data
+public class TeamData {
+    private Integer killCnt;
+    private Integer ldragonCnt;
+    private Integer money;
+    private Integer assistCnt;
+    private Integer bdragonCnt;
+    private Integer deadCnt;
+    private Integer multiCampRank;
+}

+ 26 - 0
src/test/java/com/izouma/yags/CommonTest.java

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.github.kevinsawicki.http.HttpRequest;
 import com.google.gson.Gson;
+import com.izouma.yags.camp.api.ApiResponse;
+import com.izouma.yags.camp.api.QueryBattle;
 import com.izouma.yags.camp.api.QueryRole;
 import com.izouma.yags.dto.RaexUser;
 import com.izouma.yags.exception.BusinessException;
@@ -137,4 +139,28 @@ public class CommonTest {
             throw new RuntimeException(e);
         }
     }
+
+    @Test
+    public void battlelist() {
+        OkHttpClient client = new OkHttpClient();
+        JSONObject body = new JSONObject();
+        body.put("friendRoleId", "1127583077");
+        body.put("userId", "436174868");
+        Request request = new Request.Builder()
+                .addHeader("userId", "436174868")
+                .addHeader("token", "EA8fkgWs")
+                .url("https://kohcamp.qq.com/game/morebattlelist")
+                .post(RequestBody.create(MediaType.parse("application/json"), body.toJSONString()))
+                .build();
+        try (Response response = client.newCall(request).execute()) {
+            String str = response.body().string();
+            ApiResponse response1 = JSON.parseObject(str, ApiResponse.class);
+            System.out.println(response1);
+            JSONObject data = (JSONObject) response1.getData();
+            QueryBattle queryBattle = data.toJavaObject(QueryBattle.class);
+            System.out.println(queryBattle);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }

+ 31 - 0
src/test/java/com/izouma/yags/camp/api/CampApiServiceTest.java

@@ -0,0 +1,31 @@
+package com.izouma.yags.camp.api;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@SpringBootTest
+class CampApiServiceTest {
+    @Autowired
+    private CampApiService campApiService;
+
+    @Test
+    public void getRoleItems() {
+    }
+
+    @Test
+    public void queryBattle() throws IOException {
+        QueryBattle queryBattle1 = campApiService.queryBattle("1869802843");
+        System.out.println(queryBattle1.getInvisible() + queryBattle1.getInvisDes());
+        QueryBattle queryBattle2 = campApiService.queryBattle("165684487");
+        System.out.println(queryBattle2.getInvisible() + queryBattle2.getInvisDes());
+
+        Battle battle = queryBattle2.getList().get(5);
+        QueryBattleDetail queryBattleDetail = campApiService.queryBattleDetail(battle.getGameSeq(), battle.getGameSvrId(), battle.getPvpType(), "165684487", battle.getRelaySvrId());
+        System.out.println(queryBattleDetail);
+    }
+}