src/main/java/cc/mrbird/febs/dapp/soccer/controller/SoccerController.java
@@ -2,12 +2,16 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.dapp.soccer.dto.LeaguesApiDto; import cc.mrbird.febs.dapp.soccer.dto.TeamsApiDto; import cc.mrbird.febs.dapp.soccer.service.CountryService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RequiredArgsConstructor @@ -36,4 +40,18 @@ public FebsResponse leagues(LeaguesApiDto leaguesApiDto) { return countryService.leagues(leaguesApiDto); } @ApiOperation(value = "获取联赛赛季", notes = "获取联赛赛季") @PostMapping(value = "/leagues/seasons") public FebsResponse seasons() { return countryService.seasons(); } @ApiOperation(value = "获取球队", notes = "获取球队") @PostMapping(value = "/teams") public FebsResponse teams(TeamsApiDto teamsApiDto) { return countryService.teams(teamsApiDto); } } src/main/java/cc/mrbird/febs/dapp/soccer/controller/SoccerOnlineController.java
New file @@ -0,0 +1,25 @@ package cc.mrbird.febs.dapp.soccer.controller; import cc.mrbird.febs.dapp.soccer.service.SoccerOnlineService; import io.swagger.annotations.Api; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RequiredArgsConstructor @CrossOrigin("*") @RestController @Api(value = "FOOTBALL-ONLINE", tags = "FOOTBALL-ONLINE") @RequestMapping(value = "/dapi/footballOnline") public class SoccerOnlineController { private final SoccerOnlineService soccerOnlineService; /** * */ } src/main/java/cc/mrbird/febs/dapp/soccer/dto/TeamsApiDto.java
New file @@ -0,0 +1,39 @@ package cc.mrbird.febs.dapp.soccer.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class TeamsApiDto { @ApiModelProperty(value = "球队ID", example = "20") private Integer id; @ApiModelProperty(value = "球队名称", example = "Australia") private String name; @ApiModelProperty(value = "球队编码", example = "AUS") private String code; @ApiModelProperty(value = "球队名称或国家名称", example = "Australia") private String search; @ApiModelProperty(value = "国家名称", example = "Australia") private String country; @ApiModelProperty(value = "联赛ID", example = "2024") private Integer league; @ApiModelProperty(value = "赛季,YYYY", example = "2023") private Integer season; @ApiModelProperty(value = "球馆ID", example = "20322") private String venus; } src/main/java/cc/mrbird/febs/dapp/soccer/entity/LeaguesResponse.java
@@ -20,7 +20,7 @@ private int results; @JsonProperty("paging") private JsonResponse.Paging paging; private Paging paging; @JsonProperty("response") private List<LeaguesInfo> response; src/main/java/cc/mrbird/febs/dapp/soccer/entity/SoccerLeaguesSeasons.java
New file @@ -0,0 +1,13 @@ package cc.mrbird.febs.dapp.soccer.entity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("soccer_leagues_seasons") public class SoccerLeaguesSeasons extends BaseEntity { private String seasonsName; } src/main/java/cc/mrbird/febs/dapp/soccer/entity/SoccerTeam.java
New file @@ -0,0 +1,18 @@ package cc.mrbird.febs.dapp.soccer.entity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("soccer_team") public class SoccerTeam extends BaseEntity { private Integer teamId; private String name; private String code; private String country; private Integer founded; private String national; private String logo; } src/main/java/cc/mrbird/febs/dapp/soccer/entity/SoccerVenue.java
New file @@ -0,0 +1,18 @@ package cc.mrbird.febs.dapp.soccer.entity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("soccer_venue") public class SoccerVenue extends BaseEntity { private Integer venueId; private String name; private String address; private String city; private Integer capacity; private String surface; private String image; } src/main/java/cc/mrbird/febs/dapp/soccer/entity/Team.java
New file @@ -0,0 +1,29 @@ package cc.mrbird.febs.dapp.soccer.entity; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data public class Team { @JsonProperty("id") private Integer id; @JsonProperty("name") private String name; @JsonProperty("code") private String code; @JsonProperty("country") private String country; @JsonProperty("founded") private Integer founded; @JsonProperty("national") private String national; @JsonProperty("logo") private String logo; } src/main/java/cc/mrbird/febs/dapp/soccer/entity/TeamsInfo.java
New file @@ -0,0 +1,15 @@ package cc.mrbird.febs.dapp.soccer.entity; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data public class TeamsInfo { @JsonProperty("team") private Team team; @JsonProperty("venue") private Venue venue; } src/main/java/cc/mrbird/febs/dapp/soccer/entity/TeamsInfoResponse.java
New file @@ -0,0 +1,37 @@ package cc.mrbird.febs.dapp.soccer.entity; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.List; @Data public class TeamsInfoResponse { @JsonProperty("get") private String get; @JsonProperty("parameters") private Object parameters; @JsonProperty("errors") private List<Object> errors; @JsonProperty("results") private int results; @JsonProperty("paging") private Paging paging; @JsonProperty("response") private List<TeamsInfo> response; public static class Paging { @JsonProperty("current") private int current; @JsonProperty("total") private int total; } } src/main/java/cc/mrbird/febs/dapp/soccer/entity/Venue.java
New file @@ -0,0 +1,29 @@ package cc.mrbird.febs.dapp.soccer.entity; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data public class Venue { @JsonProperty("id") private Integer id; @JsonProperty("name") private String name; @JsonProperty("address") private String address; @JsonProperty("city") private String city; @JsonProperty("capacity") private Integer capacity; @JsonProperty("surface") private String surface; @JsonProperty("image") private String image; } src/main/java/cc/mrbird/febs/dapp/soccer/mapper/SoccerLeaguesSeasonsMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.dapp.soccer.mapper; import cc.mrbird.febs.dapp.soccer.entity.SoccerLeaguesSeasons; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface SoccerLeaguesSeasonsMapper extends BaseMapper<SoccerLeaguesSeasons> { } src/main/java/cc/mrbird/febs/dapp/soccer/mapper/SoccerTeamMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.dapp.soccer.mapper; import cc.mrbird.febs.dapp.soccer.entity.SoccerTeam; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface SoccerTeamMapper extends BaseMapper<SoccerTeam> { } src/main/java/cc/mrbird/febs/dapp/soccer/mapper/SoccerVenueMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.dapp.soccer.mapper; import cc.mrbird.febs.dapp.soccer.entity.SoccerVenue; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface SoccerVenueMapper extends BaseMapper<SoccerVenue> { } src/main/java/cc/mrbird/febs/dapp/soccer/service/CountryService.java
@@ -2,6 +2,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.dapp.soccer.dto.LeaguesApiDto; import cc.mrbird.febs.dapp.soccer.dto.TeamsApiDto; import cc.mrbird.febs.dapp.soccer.entity.SoccerCountries; import com.baomidou.mybatisplus.extension.service.IService; @@ -12,4 +13,8 @@ FebsResponse leagues(LeaguesApiDto leaguesApiDto); FebsResponse timezone(); FebsResponse seasons(); FebsResponse teams(TeamsApiDto teamsApiDto); } src/main/java/cc/mrbird/febs/dapp/soccer/service/Impl/CountryServiceImpl.java
@@ -2,10 +2,9 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.dapp.soccer.dto.LeaguesApiDto; import cc.mrbird.febs.dapp.soccer.dto.TeamsApiDto; import cc.mrbird.febs.dapp.soccer.entity.*; import cc.mrbird.febs.dapp.soccer.mapper.SoccerCountriesMapper; import cc.mrbird.febs.dapp.soccer.mapper.SoccerLeaguesMapper; import cc.mrbird.febs.dapp.soccer.mapper.SoccerTimezoneMapper; import cc.mrbird.febs.dapp.soccer.mapper.*; import cc.mrbird.febs.dapp.soccer.service.CountryService; import cc.mrbird.febs.dapp.soccer.util.SoccerResponseUtil; import cn.hutool.core.collection.CollUtil; @@ -33,6 +32,9 @@ private final SoccerCountriesMapper soccerCountriesMapper; private final SoccerLeaguesMapper soccerLeaguesMapper; private final SoccerTimezoneMapper soccerTimezoneMapper; private final SoccerLeaguesSeasonsMapper soccerLeaguesSeasonsMapper; private final SoccerTeamMapper soccerTeamMapper; private final SoccerVenueMapper soccerVenueMapper; @Override public FebsResponse countries() { @@ -140,6 +142,85 @@ return new FebsResponse().success().data(jsonResponse); } @Override public FebsResponse seasons() { HttpResponse<String> httpResponse = null; /** * https://v3.football.api-sports.io/leagues/seasons */ try { httpResponse = Unirest.get("https://v3.football.api-sports.io/leagues/seasons") .header("x-rapidapi-key", "87f8d87d629d1704ba49622cb978eb81") .header("x-rapidapi-host", "v3.football.api-sports.io").asString(); } catch (UnirestException e) { e.printStackTrace(); } JsonResponse jsonResponse = SoccerResponseUtil.getJsonResponse(httpResponse); if(ObjectUtil.isNotEmpty(jsonResponse)){ List<Object> responses = jsonResponse.getResponse(); if(CollUtil.isNotEmpty(jsonResponse.getResponse())){ for(Object seasonsName : responses){ SoccerLeaguesSeasons soccerLeaguesSeasons = new SoccerLeaguesSeasons(); soccerLeaguesSeasons.setSeasonsName(SoccerResponseUtil.objectToStr(seasonsName)); soccerLeaguesSeasonsMapper.insert(soccerLeaguesSeasons); } } } return new FebsResponse().success().data(jsonResponse); } @Override public FebsResponse teams(TeamsApiDto teamsApiDto) { HttpResponse<String> httpResponse = null; String country = teamsApiDto.getCountry(); try { /** * https://v3.football.api-sports.io/teams */ httpResponse = Unirest.get(" https://v3.football.api-sports.io/teams") .header("x-rapidapi-key", "87f8d87d629d1704ba49622cb978eb81") .header("x-rapidapi-host", "v3.football.api-sports.io") .queryString("country",country) .asString(); } catch (UnirestException e) { e.printStackTrace(); } TeamsInfoResponse teamsInfoResponse = SoccerResponseUtil.getTeamsInfoResponse(httpResponse); if(ObjectUtil.isNotEmpty(teamsInfoResponse)){ List<TeamsInfo> responses = teamsInfoResponse.getResponse(); if(CollUtil.isNotEmpty(responses)){ for(TeamsInfo teamsInfo : responses){ Team team = teamsInfo.getTeam(); SoccerTeam soccerTeam = new SoccerTeam(); soccerTeam.setTeamId(team.getId()); soccerTeam.setName(team.getName()); soccerTeam.setCode(team.getCode()); soccerTeam.setCountry(team.getCountry()); soccerTeam.setFounded(team.getFounded()); soccerTeam.setNational(team.getNational()); soccerTeam.setLogo(team.getLogo()); soccerTeamMapper.insert(soccerTeam); Venue venue = teamsInfo.getVenue(); SoccerVenue soccerVenue = new SoccerVenue(); soccerVenue.setVenueId(venue.getId()); soccerVenue.setName(venue.getName()); soccerVenue.setAddress(venue.getAddress()); soccerVenue.setCity(venue.getCity()); soccerVenue.setCapacity(venue.getCapacity()); soccerVenue.setSurface(venue.getSurface()); soccerVenue.setImage(venue.getImage()); soccerVenueMapper.insert(soccerVenue); } } } return new FebsResponse().success().data(teamsInfoResponse); } public static void main(String[] args) { String str = "{\n" + " \"get\": \"leagues\",\n" + src/main/java/cc/mrbird/febs/dapp/soccer/service/Impl/SoccerOnlineServiceImpl.java
New file @@ -0,0 +1,15 @@ package cc.mrbird.febs.dapp.soccer.service.Impl; import cc.mrbird.febs.dapp.soccer.entity.SoccerLeagues; import cc.mrbird.febs.dapp.soccer.mapper.SoccerLeaguesMapper; import cc.mrbird.febs.dapp.soccer.service.SoccerOnlineService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @Slf4j @Service @RequiredArgsConstructor public class SoccerOnlineServiceImpl extends ServiceImpl<SoccerLeaguesMapper, SoccerLeagues> implements SoccerOnlineService { } src/main/java/cc/mrbird/febs/dapp/soccer/service/SoccerOnlineService.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.dapp.soccer.service; import cc.mrbird.febs.dapp.soccer.entity.SoccerLeagues; import com.baomidou.mybatisplus.extension.service.IService; public interface SoccerOnlineService extends IService<SoccerLeagues> { } src/main/java/cc/mrbird/febs/dapp/soccer/util/SoccerResponseUtil.java
@@ -3,6 +3,7 @@ import cc.mrbird.febs.common.contants.SoccerContants; import cc.mrbird.febs.dapp.soccer.entity.JsonResponse; import cc.mrbird.febs.dapp.soccer.entity.LeaguesResponse; import cc.mrbird.febs.dapp.soccer.entity.TeamsInfoResponse; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; @@ -50,6 +51,22 @@ return leaguesResponse; } /** * 将接口获取到的返回值转换成TeamsInfoResponse * @param response * @return */ public static TeamsInfoResponse getTeamsInfoResponse(HttpResponse<String> response){ TeamsInfoResponse teamsInfoResponse = new TeamsInfoResponse(); ObjectMapper mapper = new ObjectMapper(); try { teamsInfoResponse = mapper.readValue(response.getBody(), TeamsInfoResponse.class); } catch (Exception e) { e.printStackTrace(); } return teamsInfoResponse; } public static String objectToStr(Object object){ return ObjectUtil.isEmpty(object) ? "-" : (String) object; }