Commit 3249b0c3 authored by liming's avatar liming

团练接口

parent 9194eb97
...@@ -56,7 +56,7 @@ public class TeamTrainingPlayerRecord implements Serializable { ...@@ -56,7 +56,7 @@ public class TeamTrainingPlayerRecord implements Serializable {
/** /**
* 比赛名次 * 比赛名次
*/ */
private Integer matchRank; private Integer trainingRank;
/** /**
* 骑行总长度 * 骑行总长度
......
package com.antai.sport.http.server.server.api.business.teamtraining.controller; package com.antai.sport.http.server.server.api.business.teamtraining.controller;
import com.antai.sport.http.server.common.base.Result; import com.antai.sport.http.server.common.base.Result;
import com.antai.sport.http.server.server.api.business.simplematch.dto.ReqSimpleMatchRegist; import com.antai.sport.http.server.server.api.business.teamtraining.dto.*;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingBannerResponseDTO;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingForListResponseDTO;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingRegistRequestDTO;
import com.antai.sport.http.server.server.api.business.teamtraining.service.TeamTrainingService; import com.antai.sport.http.server.server.api.business.teamtraining.service.TeamTrainingService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -41,10 +38,30 @@ public class TeamTrainingController { ...@@ -41,10 +38,30 @@ public class TeamTrainingController {
return success(teamTrainingService.getUnFinishedTeamTrainingForUser(userId)); return success(teamTrainingService.getUnFinishedTeamTrainingForUser(userId));
} }
@ApiOperation("团练报名报名") @ApiOperation("团练报名")
@PostMapping("/regist") @PostMapping("/regist")
public ResponseEntity<Result> register(@RequestBody TeamTrainingRegistRequestDTO param) { public ResponseEntity<Result> register(@RequestBody TeamTrainingRegistRequestDTO param) {
teamTrainingService.regist(param); teamTrainingService.regist(param);
return success(); return success();
} }
@ApiOperation("查询团练明细")
@PostMapping("/info")
public ResponseEntity<Result<TeamTrainingInfoResponseDTO>> teamTrainingInfo(@RequestBody TeamTrainingInfoRequestDTO param) {
return success(teamTrainingService.teamTrainingInfo(param));
}
@ApiOperation("获取团练报名人信息")
@PostMapping("/{teamTrainingId}/register/list")
public ResponseEntity<Result<List<Long>>> getRegisterList(@PathVariable("teamTrainingId") Long teamTrainingId) {
return success(teamTrainingService.getRegisterList(teamTrainingId));
}
@ApiOperation("查询日团练排名")
@GetMapping("/rank/{teamTrainingId}")
public ResponseEntity<Result<List<TeamTrainingRankDTO>>> rank(@PathVariable("teamTrainingId") Long teamTrainingId) {
return success(teamTrainingService.rank(teamTrainingId));
}
} }
package com.antai.sport.http.server.server.api.business.teamtraining.converter; package com.antai.sport.http.server.server.api.business.teamtraining.converter;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTraining;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingBanner; import com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingBanner;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingBannerResponseDTO; import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingBannerResponseDTO;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingInfoResponseDTO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import java.util.List; import java.util.List;
...@@ -10,4 +12,6 @@ import java.util.List; ...@@ -10,4 +12,6 @@ import java.util.List;
public interface TeamTrainingConverter { public interface TeamTrainingConverter {
List<TeamTrainingBannerResponseDTO> toTeamTrainingBannerResponseDTO(List<TeamTrainingBanner> source); List<TeamTrainingBannerResponseDTO> toTeamTrainingBannerResponseDTO(List<TeamTrainingBanner> source);
TeamTrainingInfoResponseDTO toTeamTrainingInfoResponseDTO(TeamTraining source);
} }
...@@ -36,12 +36,15 @@ public class TeamTrainingForListResponseDTO { ...@@ -36,12 +36,15 @@ public class TeamTrainingForListResponseDTO {
@ApiModelProperty("开始比赛时间 yyyy-MM-dd HH:mm:ss") @ApiModelProperty("开始比赛时间 yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime startTime; private LocalDateTime startTime;
@ApiModelProperty("比赛结束时间 yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime endTime;
@ApiModelProperty("长度") @ApiModelProperty("长度")
public BigDecimal distance; public BigDecimal distance;
@ApiModelProperty("爬坡高度") @ApiModelProperty("爬坡高度")
public BigDecimal climbDistance; public BigDecimal climbDistance;
@ApiModelProperty("报名人数") @ApiModelProperty("报名人数")
public BigDecimal registerNum; public Integer registeredNum;
@ApiModelProperty("是否已报名,只有当按用户查询时有效") @ApiModelProperty("是否已报名,只有当按用户查询时有效")
public Boolean registered; public Boolean registered;
} }
package com.antai.sport.http.server.server.api.business.teamtraining.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("团练详情查询对象")
public class TeamTrainingInfoRequestDTO {
@ApiModelProperty("团练id")
private Long teamTrainingId;
@ApiModelProperty("玩家id")
private Long playerId;
}
package com.antai.sport.http.server.server.api.business.teamtraining.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@ApiModel("团练列表对象")
public class TeamTrainingInfoResponseDTO {
@ApiModelProperty("团练id")
public Long id;
@ApiModelProperty("团长id")
public Long leaderId;
@ApiModelProperty("团长姓名")
public String leaderName;
@ApiModelProperty("头像")
private String avatar;
@ApiModelProperty("训练时长(分钟)")
public Integer trainingMinute;
@ApiModelProperty("团练名称")
public String name;
@ApiModelProperty("地图")
private String map;
@ApiModelProperty("赛道")
private String path;
@ApiModelProperty("允许进入时间 yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime entryTime;
@ApiModelProperty("开始比赛时间 yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime startTime;
@ApiModelProperty("比赛结束时间 yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime endTime;
@ApiModelProperty("长度")
public BigDecimal distance;
@ApiModelProperty("爬坡高度")
public BigDecimal climbDistance;
@ApiModelProperty("报名人数")
public Integer registeredNum;
@ApiModelProperty("是否已报名,只有当按用户查询时有效")
public Boolean registered;
@ApiModelProperty("团练描述")
private String description;
}
package com.antai.sport.http.server.server.api.business.teamtraining.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@ApiModel("团练排名")
@Data
public class TeamTrainingRankDTO {
@ApiModelProperty("用户Id")
private Long playerId;
@ApiModelProperty("昵称")
private String nickname;
@ApiModelProperty("头像")
private String avatar;
@ApiModelProperty("比赛名次")
private Integer trainingRank;
@ApiModelProperty("用时(秒)")
private Integer duration;
@ApiModelProperty("骑行总长度")
private BigDecimal distance;
@ApiModelProperty("爬坡高度")
private BigDecimal climbDistance;
@ApiModelProperty("平均功率")
private BigDecimal avgFtp;
@ApiModelProperty("平均速度")
private BigDecimal avgSpeed;
@ApiModelProperty("状态 10:未完赛 20:已完赛")
private Integer status;
}
package com.antai.sport.http.server.server.api.business.teamtraining.mapper; package com.antai.sport.http.server.server.api.business.teamtraining.mapper;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingForListResponseDTO; import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingForListResponseDTO;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingRankDTO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -10,4 +11,8 @@ public interface TeamTrainingBusinessMapper { ...@@ -10,4 +11,8 @@ public interface TeamTrainingBusinessMapper {
List<TeamTrainingForListResponseDTO> getUnFinishedTeamTrainingForUser(@Param("userId") Long userId, @Param("now") LocalDateTime now); List<TeamTrainingForListResponseDTO> getUnFinishedTeamTrainingForUser(@Param("userId") Long userId, @Param("now") LocalDateTime now);
List<TeamTrainingForListResponseDTO> getUnFinishedTeamTrainingForServer(@Param("now") LocalDateTime now); List<TeamTrainingForListResponseDTO> getUnFinishedTeamTrainingForServer(@Param("now") LocalDateTime now);
List<Long> getRegisterList(@Param("teamTrainingId") Long teamTrainingId);
List<TeamTrainingRankDTO> getTrainingRank(@Param("teamTrainingId") Long teamTrainingId);
} }
...@@ -2,14 +2,16 @@ package com.antai.sport.http.server.server.api.business.teamtraining.service; ...@@ -2,14 +2,16 @@ package com.antai.sport.http.server.server.api.business.teamtraining.service;
import com.antai.sport.http.server.common.exception.BusinessException; import com.antai.sport.http.server.common.exception.BusinessException;
import com.antai.sport.http.server.constants.DeleteStatus; import com.antai.sport.http.server.constants.DeleteStatus;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTraining;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingBanner; import com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingBanner;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingLeader;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingPlayerRegistLog; import com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingPlayerRegistLog;
import com.antai.sport.http.server.repository.teamtraining.mapper.TeamTrainingBannerMapper; import com.antai.sport.http.server.repository.teamtraining.mapper.TeamTrainingBannerMapper;
import com.antai.sport.http.server.repository.teamtraining.mapper.TeamTrainingLeaderMapper;
import com.antai.sport.http.server.repository.teamtraining.mapper.TeamTrainingMapper;
import com.antai.sport.http.server.repository.teamtraining.mapper.TeamTrainingPlayerRegistLogMapper; import com.antai.sport.http.server.repository.teamtraining.mapper.TeamTrainingPlayerRegistLogMapper;
import com.antai.sport.http.server.server.api.business.teamtraining.converter.TeamTrainingConverter; import com.antai.sport.http.server.server.api.business.teamtraining.converter.TeamTrainingConverter;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingBannerResponseDTO; import com.antai.sport.http.server.server.api.business.teamtraining.dto.*;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingForListResponseDTO;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingRegistRequestDTO;
import com.antai.sport.http.server.server.api.business.teamtraining.mapper.TeamTrainingBusinessMapper; import com.antai.sport.http.server.server.api.business.teamtraining.mapper.TeamTrainingBusinessMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -28,6 +30,10 @@ public class TeamTrainingService { ...@@ -28,6 +30,10 @@ public class TeamTrainingService {
private TeamTrainingBannerMapper teamTrainingBannerMapper; private TeamTrainingBannerMapper teamTrainingBannerMapper;
@Resource @Resource
private TeamTrainingPlayerRegistLogMapper teamTrainingPlayerRegistLogMapper; private TeamTrainingPlayerRegistLogMapper teamTrainingPlayerRegistLogMapper;
@Resource
private TeamTrainingMapper teamTrainingMapper;
@Resource
private TeamTrainingLeaderMapper teamTrainingLeaderMapper;
@Resource @Resource
private TeamTrainingBusinessMapper teamTrainingBusinessMapper; private TeamTrainingBusinessMapper teamTrainingBusinessMapper;
...@@ -81,4 +87,46 @@ public class TeamTrainingService { ...@@ -81,4 +87,46 @@ public class TeamTrainingService {
registLog.setCreateTime(LocalDateTime.now()); registLog.setCreateTime(LocalDateTime.now());
teamTrainingPlayerRegistLogMapper.insert(registLog); teamTrainingPlayerRegistLogMapper.insert(registLog);
} }
/**
* 查询团练详情
*
* @param param
* @return
*/
public TeamTrainingInfoResponseDTO teamTrainingInfo(TeamTrainingInfoRequestDTO param) {
TeamTraining teamTraining = teamTrainingMapper.selectById(param.getTeamTrainingId());
TeamTrainingInfoResponseDTO result = teamTrainingConverter.toTeamTrainingInfoResponseDTO(teamTraining);
QueryWrapper<TeamTrainingPlayerRegistLog> countQuery = new QueryWrapper<>();
countQuery.eq("team_training_id", param.getTeamTrainingId());
Integer registeredNum = teamTrainingPlayerRegistLogMapper.selectCount(countQuery);
result.setRegisteredNum(registeredNum);
countQuery.eq("player_id", param.getPlayerId());
Boolean registered = teamTrainingPlayerRegistLogMapper.selectCount(countQuery) > 0;
result.setRegistered(registered);
TeamTrainingLeader leader = teamTrainingLeaderMapper.selectById(teamTraining.getLeaderId());
result.setLeaderName(leader.getRealName());
result.setAvatar(leader.getAvatar());
return result;
}
/**
* 获取团练报名信息
*
* @param teamTrainingId
* @return
*/
public List<Long> getRegisterList(Long teamTrainingId) {
return teamTrainingBusinessMapper.getRegisterList(teamTrainingId);
}
/**
* 查询团练排名
*
* @param teamTrainingId
* @return
*/
public List<TeamTrainingRankDTO> rank(Long teamTrainingId) {
return teamTrainingBusinessMapper.getTrainingRank(teamTrainingId);
}
} }
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
from ( from (
select ifnull(t2.base_order, 0) registered, select ifnull(t2.base_order, 0) registered,
t1.start_time as show_time, t1.start_time as show_time,
t3.registered_num,
t4.real_name as leader_name, t4.real_name as leader_name,
t4.avatar, t4.avatar,
t1.* t1.*
...@@ -17,10 +18,10 @@ ...@@ -17,10 +18,10 @@
where j1.player_id = #{userId} where j1.player_id = #{userId}
) t2 on t1.id = t2.team_training_id ) t2 on t1.id = t2.team_training_id
left join ( left join (
select j1.team_training_id, count(1) as register_num select j1.team_training_id, count(1) as registered_num
from team_training_player_regist_log j1 from team_training_player_regist_log j1
group by j1.team_training_id group by j1.team_training_id
) t3 on t1.id = t2.team_training_id ) t3 on t1.id = t3.team_training_id
left join team_training_leader t4 on t1.leader_id = t4.id left join team_training_leader t4 on t1.leader_id = t4.id
where t1.end_time &gt; #{now} where t1.end_time &gt; #{now}
and t1.deleted = 0 and t1.deleted = 0
...@@ -39,4 +40,18 @@ ...@@ -39,4 +40,18 @@
and t1.status = 20 and t1.status = 20
order by t1.show_order, t1.start_time order by t1.show_order, t1.start_time
</select> </select>
<select id="getRegisterList" resultType="java.lang.Long">
select player_id from team_training_player_regist_log t1 where t1.team_training_id = #{teamTrainingId}
</select>
<select id="getTrainingRank" resultType="com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingRankDTO">
select t2.avatar,
t2.nickname,
t1.*
from team_training_player_record t1
left join sport_user t2 on t1.player_id = t2.id
where t1.team_training_id = #{teamTrainingId}
order by training_rank asc
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment