Commit ea67eb85 authored by liming's avatar liming

团练接口

parent 3249b0c3
......@@ -64,4 +64,17 @@ public class TeamTrainingController {
return success(teamTrainingService.rank(teamTrainingId));
}
@ApiOperation("玩家加入团练数据初始化")
@PostMapping("/record/init")
public ResponseEntity<Result<TeamTrainingPlayerRecordInitResponseDTO>> recordInit(@RequestBody TeamTrainingPlayerRecordInitRequestDTO param) {
return success(teamTrainingService.recordInit(param));
}
@ApiOperation("团练记录上传")
@PostMapping("/record/upload")
public ResponseEntity<Result> recordUpload(@RequestBody List<TeamTrainingRecordUploadDTO> dataList) {
teamTrainingService.recordUpload(dataList);
return success();
}
}
......@@ -2,8 +2,10 @@ 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.TeamTrainingPlayerRecord;
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 com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingRecordUploadDTO;
import org.mapstruct.Mapper;
import java.util.List;
......@@ -14,4 +16,6 @@ public interface TeamTrainingConverter {
List<TeamTrainingBannerResponseDTO> toTeamTrainingBannerResponseDTO(List<TeamTrainingBanner> source);
TeamTrainingInfoResponseDTO toTeamTrainingInfoResponseDTO(TeamTraining source);
TeamTrainingPlayerRecord toTeamTrainingPlayerRecord(TeamTrainingRecordUploadDTO source);
}
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 TeamTrainingPlayerRecordInitRequestDTO {
@ApiModelProperty("团练id")
private Long teamTrainingId;
@ApiModelProperty("玩家id")
private Long playerId;
}
package com.antai.sport.http.server.server.api.business.teamtraining.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("加入团练初始化响应对象")
@Data
public class TeamTrainingPlayerRecordInitResponseDTO {
@ApiModelProperty("记录id")
private Long recordId;
@ApiModelProperty("运动类型")
private Integer sportType;
@ApiModelProperty("游戏模式")
private Integer gameMode;
}
package com.antai.sport.http.server.server.api.business.teamtraining.dto;
import com.antai.sport.http.server.server.api.common.dto.CyclingDataDTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@ApiModel("日常赛团练记录上传")
public class TeamTrainingRecordUploadDTO extends CyclingDataDTO {
@ApiModelProperty("状态 10:未完赛 20:已完赛")
public Integer status;
@ApiModelProperty("完成时间 yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
public LocalDateTime finishTime;
}
package com.antai.sport.http.server.server.api.business.teamtraining.dto;
import lombok.Data;
@Data
public class TeamTrainingUserScheduleVO {
private Integer day;
private String time;
}
......@@ -2,8 +2,10 @@ 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.TeamTrainingRankDTO;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingUserScheduleVO;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
......@@ -15,4 +17,6 @@ public interface TeamTrainingBusinessMapper {
List<Long> getRegisterList(@Param("teamTrainingId") Long teamTrainingId);
List<TeamTrainingRankDTO> getTrainingRank(@Param("teamTrainingId") Long teamTrainingId);
List<TeamTrainingUserScheduleVO> getUserRegistSchedule(@Param("playerId") Long playerId, @Param("beginDate") LocalDate beginDate, @Param("endDate") LocalDate endDate, @Param("today") LocalDate today);
}
......@@ -2,19 +2,21 @@ 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.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.TeamTrainingLeader;
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.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.constants.GameMode;
import com.antai.sport.http.server.constants.SportType;
import com.antai.sport.http.server.repository.simplematch.entity.SimpleMatch;
import com.antai.sport.http.server.repository.sport.entity.SportUser;
import com.antai.sport.http.server.repository.sport.mapper.SportUserMapper;
import com.antai.sport.http.server.repository.teamtraining.entity.*;
import com.antai.sport.http.server.repository.teamtraining.mapper.*;
import com.antai.sport.http.server.server.api.business.praise.service.PraiseService;
import com.antai.sport.http.server.server.api.business.teamtraining.converter.TeamTrainingConverter;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.*;
import com.antai.sport.http.server.server.api.business.teamtraining.mapper.TeamTrainingBusinessMapper;
import com.antai.sport.http.server.server.api.business.traininglog.service.SportUserTrainingLogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
......@@ -34,10 +36,19 @@ public class TeamTrainingService {
private TeamTrainingMapper teamTrainingMapper;
@Resource
private TeamTrainingLeaderMapper teamTrainingLeaderMapper;
@Resource
private TeamTrainingPlayerRecordMapper teamTrainingPlayerRecordMapper;
@Resource
private SportUserMapper sportUserMapper;
@Resource
private TeamTrainingBusinessMapper teamTrainingBusinessMapper;
@Resource
private PraiseService praiseService;
@Resource
private SportUserTrainingLogService sportUserTrainingLogService;
/**
* 获取日常赛banner列表
*
......@@ -129,4 +140,54 @@ public class TeamTrainingService {
public List<TeamTrainingRankDTO> rank(Long teamTrainingId) {
return teamTrainingBusinessMapper.getTrainingRank(teamTrainingId);
}
/**
* 初始化玩家记录
*
* @param param
* @return
*/
public TeamTrainingPlayerRecordInitResponseDTO recordInit(TeamTrainingPlayerRecordInitRequestDTO param) {
TeamTrainingPlayerRecordInitResponseDTO result = new TeamTrainingPlayerRecordInitResponseDTO();
result.setSportType(SportType.BICYCLE);
result.setGameMode(GameMode.GROUP_TRAINING);
QueryWrapper<TeamTrainingPlayerRecord> countQuery = new QueryWrapper<>();
countQuery.eq("team_training_id", param.getTeamTrainingId());
countQuery.eq("player_id", param.getPlayerId());
Boolean isRepeat = teamTrainingPlayerRecordMapper.selectCount(countQuery) > 0;
if (isRepeat) {
throw new BusinessException("您已进入不能重复进入");
}
TeamTrainingPlayerRecord record = new TeamTrainingPlayerRecord();
record.setTeamTrainingId(param.getTeamTrainingId());
record.setPlayerId(param.getPlayerId());
record.setEntryTime(LocalDateTime.now());
teamTrainingPlayerRecordMapper.insert(record);
result.setRecordId(record.getId());
return result;
}
/**
* 比赛记录上传
*/
@Transactional
public void recordUpload(List<TeamTrainingRecordUploadDTO> dataList) {
dataList.forEach(item -> {
TeamTrainingPlayerRecord oldRecord = teamTrainingPlayerRecordMapper.selectById(item.getRecordId());
if (oldRecord.getStatus() == null) {
SportUser user = sportUserMapper.selectById(oldRecord.getPlayerId());
item.setWeight(user.getWeight());
TeamTrainingPlayerRecord record = teamTrainingConverter.toTeamTrainingPlayerRecord(item);
record.setPraiseNum(praiseService.getPraiseByGameModeAndRecordId(GameMode.GROUP_TRAINING, item.getRecordId()));
teamTrainingPlayerRecordMapper.updateById(record);
//生成骑行日志
TeamTraining teamTraining = teamTrainingMapper.selectById(oldRecord.getTeamTrainingId());
sportUserTrainingLogService.createBicycleTrainingLog(oldRecord.getPlayerId(), GameMode.GROUP_TRAINING,
oldRecord.getId(), teamTraining.getMap(), teamTraining.getPath(), record.getPraiseNum(), item);
}
});
}
}
......@@ -14,6 +14,8 @@ import com.antai.sport.http.server.repository.sport.mapper.SportUserSummaryMappe
import com.antai.sport.http.server.repository.sport.mapper.SportUserTrainingLogMapper;
import com.antai.sport.http.server.server.api.business.simplematch.dto.SimpleMatchUserScheduleVO;
import com.antai.sport.http.server.server.api.business.simplematch.mapper.SimpleMatchBusinessMapper;
import com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingUserScheduleVO;
import com.antai.sport.http.server.server.api.business.teamtraining.mapper.TeamTrainingBusinessMapper;
import com.antai.sport.http.server.server.api.business.traininglog.converter.SportUserTrainingLogConverter;
import com.antai.sport.http.server.server.api.business.traininglog.dto.SportUserTrainingLogSummaryVO;
import com.antai.sport.http.server.server.api.business.traininglog.dto.SportUserTrainingLogVO;
......@@ -55,6 +57,8 @@ public class SportUserTrainingLogService {
private SportUserMonthRankBusinessMapper sportUserMonthRankBusinessMapper;
@Resource
private SimpleMatchBusinessMapper simpleMatchBusinessMapper;
@Resource
private TeamTrainingBusinessMapper teamTrainingBusinessMapper;
@Resource
private SportUserTrainingLogConverter sportUserTrainingLogConverter;
......@@ -275,6 +279,23 @@ public class SportUserTrainingLogService {
schedule.setTypeName("日常赛");
resultMap.get(item.getDay()).getScheduleList().add(schedule);
});
List<TeamTrainingUserScheduleVO> teamTrainingUserScheduleList = teamTrainingBusinessMapper.getUserRegistSchedule(userId, beginDate, endDate, today);
teamTrainingUserScheduleList.forEach(item -> {
if (!resultMap.containsKey(item.getDay())) {
ScheduleResponseDTO scheduleResponseDTO = new ScheduleResponseDTO();
scheduleResponseDTO.setScheduleList(new ArrayList<>());
scheduleResponseDTO.setDay(item.getDay());
scheduleResponseDTO.setActive(false);
resultMap.put(item.getDay(), scheduleResponseDTO);
}
ScheduleVO schedule = new ScheduleVO();
schedule.setTime(item.getTime());
schedule.setType(GameMode.GROUP_TRAINING);
schedule.setTypeName("团练");
resultMap.get(item.getDay()).getScheduleList().add(schedule);
});
for (Integer i = 1; i <= 31; i++) {
if (resultMap.containsKey(i)) {
resultList.add(resultMap.get(i));
......
......@@ -54,4 +54,12 @@
where t1.team_training_id = #{teamTrainingId}
order by training_rank asc
</select>
<select id="getUserRegistSchedule" resultType="com.antai.sport.http.server.server.api.business.teamtraining.dto.TeamTrainingUserScheduleVO">
select DAYOFMONTH(t2.start_time) day,date_format(t2.start_time,'%H:%i') as time
from team_training_player_regist_log t1
join team_training t2 on t1.team_training_id = t2.id
where t1.player_id = #{playerId} and t2.start_time &gt;= #{today} and t2.start_time &gt;= #{beginDate} and t2.start_time &lt; #{endDate}
order by t2.start_time asc
</select>
</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