Commit 19752753 authored by liming's avatar liming

初始化团长管理端

parent 137aa752
package com.antai.sport.http.server.team.training.leader.api.business.teamtraining.controller;
import com.antai.sport.http.server.common.base.Result;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingLeader;
import com.antai.sport.http.server.team.training.leader.api.annotation.LoginUser;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.TeamTrainingListRequestDTO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.TeamTrainingListResponseDTO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.TeamTrainingResponseDTO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.TeamTrainingVO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.service.TeamTrainingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import static com.antai.sport.http.server.common.util.ResultUtil.success;
@RestController
@RequestMapping("/team/training")
@Api(tags = {"日常赛"})
public class TeamTrainingController {
@Resource
private TeamTrainingService teamTrainingService;
@ApiOperation("加载团练列表")
@PostMapping("list")
public ResponseEntity<Result<TeamTrainingListResponseDTO>> getMatchList(@RequestBody TeamTrainingListRequestDTO param, @LoginUser TeamTrainingLeader loginUser) {
return success(teamTrainingService.getTrainingList(param, loginUser));
}
@ApiOperation("删除")
@DeleteMapping("/{trainingId}")
public ResponseEntity<Result> deleteMatch(@PathVariable("trainingId") Long trainingId) {
teamTrainingService.delete(trainingId);
return success();
}
@ApiOperation("更改发布状态")
@PutMapping("/{trainingId}")
public ResponseEntity<Result> publish(@PathVariable("trainingId") Long trainingId) {
teamTrainingService.publish(trainingId);
return success();
}
@ApiOperation("获取团练数据")
@GetMapping("/{trainingId}")
public ResponseEntity<Result<TeamTrainingResponseDTO>> getSimpleMatch(@PathVariable("trainingId") Long trainingId) {
return success(teamTrainingService.getTraining(trainingId));
}
@ApiOperation("创建团练")
@PostMapping
public ResponseEntity<Result> save(@RequestBody TeamTrainingVO teamTrainingVO, @LoginUser TeamTrainingLeader loginUser) {
teamTrainingService.save(teamTrainingVO, loginUser);
return success();
}
}
package com.antai.sport.http.server.team.training.leader.api.business.teamtraining.converter;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTraining;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.TeamTrainingVO;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface TeamTrainingConverter {
TeamTrainingVO toTeamTrainingVO(TeamTraining source);
TeamTraining toTeamTraining(TeamTrainingVO source);
}
package com.antai.sport.http.server.team.training.leader.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.time.LocalDate;
@Data
@ApiModel("日常赛列表查询条件")
public class TeamTrainingListRequestDTO {
private Integer pageNo;
private Integer pageSize;
private String sortField;
private String sortOrder;
@ApiModelProperty("比赛名称")
private String name;
@ApiModelProperty("比赛开始时间查询:开始时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate beginDate;
@ApiModelProperty("比赛开始时间查询:结束时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate endDate;
}
package com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.TeamTrainingListVO;
import lombok.Data;
import java.util.List;
@Data
public class TeamTrainingListResponseDTO {
private List<TeamTrainingListVO> data;
private Integer pageNo;
private Long totalCount;
}
package com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.MapPathVO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.TeamTrainingVO;
import lombok.Data;
import java.util.List;
@Data
public class TeamTrainingResponseDTO {
private TeamTrainingVO training;
private List<MapPathVO> mapList;
}
package com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo;
import lombok.Data;
import java.util.List;
@Data
public class MapPathVO {
private Integer id;
private String key;
private String name;
List<MapPathVO> pathList;
}
package com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class TeamTrainingListVO {
private Long id;
private String name;
private String mapName;
private String pathName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime startTime;
private Integer status;
}
package com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class TeamTrainingVO {
private Long id;
private String name;
private Integer trainingMinute;
private String map;
private String path;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
private LocalDateTime entryTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
private LocalDateTime startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
private LocalDateTime endTime;
private BigDecimal distance;
private BigDecimal climbDistance;
private String description;
private Integer status;
}
package com.antai.sport.http.server.team.training.leader.api.business.teamtraining.mapper;
import com.antai.sport.http.server.repository.simplematch.entity.SimpleMatch;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.TeamTrainingListRequestDTO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.TeamTrainingListVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
public interface TeamTrainingBusinessMapper extends BaseMapper<SimpleMatch> {
IPage<TeamTrainingListVO> getTrainingList(IPage<TeamTrainingListVO> page, @Param("param") TeamTrainingListRequestDTO param, @Param("userId") Long userId);
}
package com.antai.sport.http.server.team.training.leader.api.business.teamtraining.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@Service
@Slf4j
public class TeamTrainingChangeNotifyService {
@Value("${simple-match-change-notify-url}")
private String simpleMatchChangeNotifyUrl;
@Resource
private RestTemplate restTemplate;
@Async("asyncTaskExecutor")
public void notifyGameServerSimpleMatchChange() {
log.info("异步通知比赛列表变更");
String result = "执行失败";
try {
result = restTemplate.getForObject(simpleMatchChangeNotifyUrl, String.class);
} catch (Exception ex) {
log.error(ex.getMessage());
}
log.info("比赛变更结果:" + result);
}
}
package com.antai.sport.http.server.team.training.leader.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.map.entity.Map;
import com.antai.sport.http.server.repository.map.entity.MapPath;
import com.antai.sport.http.server.repository.map.mapper.MapMapper;
import com.antai.sport.http.server.repository.map.mapper.MapPathMapper;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTraining;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTrainingLeader;
import com.antai.sport.http.server.repository.teamtraining.mapper.TeamTrainingMapper;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.converter.TeamTrainingConverter;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.TeamTrainingListRequestDTO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.TeamTrainingListResponseDTO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.TeamTrainingResponseDTO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.MapPathVO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.TeamTrainingListVO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.TeamTrainingVO;
import com.antai.sport.http.server.team.training.leader.api.business.teamtraining.mapper.TeamTrainingBusinessMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Service
public class TeamTrainingService {
@Resource
private TeamTrainingMapper teamTrainingMapper;
@Resource
private TeamTrainingBusinessMapper teamTrainingBusinessMapper;
@Resource
private MapMapper mapMapper;
@Resource
private MapPathMapper mapPathMapper;
@Resource
private TeamTrainingConverter teamTrainingConverter;
@Resource
private TeamTrainingChangeNotifyService teamTrainingChangeNotifyService;
public TeamTrainingListResponseDTO getTrainingList(TeamTrainingListRequestDTO param, TeamTrainingLeader loginUser) {
Page<TeamTrainingListVO> pageParam = new Page<>(param.getPageNo(), param.getPageSize());
if (StringUtils.isNotEmpty(param.getSortOrder())) {
pageParam.addOrder(new OrderItem("start_time", "asc".equals(param.getSortOrder())));
}
pageParam.addOrder(new OrderItem("id", false));
IPage<TeamTrainingListVO> result = teamTrainingBusinessMapper.getTrainingList(pageParam, param , loginUser.getId());
TeamTrainingListResponseDTO dto = new TeamTrainingListResponseDTO();
dto.setData(result.getRecords());
dto.setPageNo(param.getPageNo());
dto.setTotalCount(result.getTotal());
return dto;
}
public void delete(Long trainingId) {
TeamTraining teamTraining = teamTrainingMapper.selectById(trainingId);
if (teamTraining.getStatus() != null && teamTraining.getStatus().equals(20)) {
throw new BusinessException("已发布比赛不能删除");
}
teamTraining.setDeleted(Integer.valueOf(DeleteStatus.DELETED));
teamTrainingMapper.updateById(teamTraining);
}
public void publish(Long trainingId) {
TeamTraining teamTraining = teamTrainingMapper.selectById(trainingId);
if (teamTraining.getStatus() == null || teamTraining.getStatus().equals(10)) {
teamTraining.setStatus(20);
} else {
teamTraining.setStatus(10);
}
teamTrainingMapper.updateById(teamTraining);
// simpleMatchChangeNotifyService.notifyGameServerSimpleMatchChange();
}
public TeamTrainingResponseDTO getTraining(Long trainingId) {
TeamTrainingResponseDTO result = new TeamTrainingResponseDTO();
TeamTraining training;
if (trainingId == null || trainingId == 0) {
training = new TeamTraining();
training.setStatus(10);
} else {
training = teamTrainingMapper.selectById(trainingId);
if (training == null) {
throw new BusinessException("您查询的比赛不存在");
}
}
TeamTrainingVO teamTrainingVO = teamTrainingConverter.toTeamTrainingVO(training);
result.setTraining(teamTrainingVO);
List<Map> mapList = mapMapper.selectList(null);
List<MapPath> mapPathList = mapPathMapper.selectList(null);
HashMap<String, MapPathVO> mapPathVOHashMap = new HashMap<>();
List<MapPathVO> mapPathVOList = new ArrayList<>(mapList.size());
mapList.forEach(item -> {
MapPathVO mapVO = new MapPathVO();
mapVO.setId(item.getId());
mapVO.setKey(item.getMapKey());
mapVO.setName(item.getMapName());
mapVO.setPathList(new ArrayList<>());
mapPathVOList.add(mapVO);
mapPathVOHashMap.put(item.getMapKey(), mapVO);
});
mapPathList.forEach(item -> {
MapPathVO mapPathVO = new MapPathVO();
mapPathVO.setId(item.getId());
mapPathVO.setKey(item.getPathKey());
mapPathVO.setName(item.getPathName());
if (mapPathVOHashMap.containsKey(item.getMapKey())) {
mapPathVOHashMap.get(item.getMapKey()).getPathList().add(mapPathVO);
}
});
result.setMapList(mapPathVOList);
return result;
}
public void save(TeamTrainingVO teamTrainingVO, TeamTrainingLeader loginUser) {
TeamTraining training = teamTrainingConverter.toTeamTraining(teamTrainingVO);
if (training.getId() != null && training.getId() > 0) {
teamTrainingMapper.updateById(training);
} else {
training.setStatus(10);
training.setLeaderId(loginUser.getId());
teamTrainingMapper.insert(training);
}
// teamTrainingChangeNotifyService.notifyGameServerSimpleMatchChange();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.antai.sport.http.server.team.training.leader.api.business.teamtraining.mapper.TeamTrainingBusinessMapper">
<select id="getTrainingList" resultType="com.antai.sport.http.server.team.training.leader.api.business.teamtraining.dto.vo.TeamTrainingListVO">
select t1.*,t2.map_name,t3.path_name
from team_training t1
left join map t2 on t1.map = t2.map_key
left join map_path t3 on t1.path = t3.path_key
where t1.deleted = 0
and t1.leader_id = #{userId}
<if test="param.name != null and param.name != ''">
and t1.name like concat('%',#{param.name},'%')
</if>
<if test="param.beginDate != null">
and t1.start_time &gt;= #{param.beginDate}
</if>
<if test="param.endDate != null">
and t1.start_time &lt; date_add(#{param.endDate}, interval 1 day)
</if>
</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