Commit 0e642677 authored by liming's avatar liming

日常赛

parent 676b0037
package com.antai.sport.http.server.repository.simplematch.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author liming
* @since 2022-04-11
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SimpleMatch implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 比赛名称
*/
private String name;
/**
* logo
*/
private String logo;
/**
* 地图key
*/
private String map;
/**
* 赛道key
*/
private String path;
/**
* 允许进入时间
*/
private LocalDateTime entryTime;
/**
* 比赛开始时间
*/
private LocalDateTime startTime;
/**
* 比赛结束时间
*/
private LocalDateTime endTime;
/**
* 总长度
*/
private BigDecimal distance;
/**
* 爬坡高度
*/
private BigDecimal climbDistance;
/**
* 描述
*/
private String description;
/**
* 显示顺序
*/
private Integer showOrder;
/**
* 版本号
*/
private Long version;
/**
* 删除标记
*/
private Integer deleted;
/**
* 创建人
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改人
*/
private Long updateBy;
/**
* 修改时间
*/
private LocalDateTime updateTime;
}
package com.antai.sport.http.server.repository.simplematch.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author liming
* @since 2022-04-11
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SimpleMatchBanner implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 图片地址
*/
private String imgUrl;
/**
* 显示顺序
*/
private Integer showOrder;
/**
* 删除状态
*/
private Integer deleted;
/**
* 创建人
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改人
*/
private Long updateBy;
/**
* 修改时间
*/
private LocalDateTime updateTime;
}
package com.antai.sport.http.server.repository.simplematch.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author liming
* @since 2022-04-11
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SimpleMatchPlayerRecord implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 比赛id
*/
private Long matchId;
/**
* 玩家id
*/
private Long playerId;
/**
* 比赛进入时间
*/
private LocalDateTime entryTime;
/**
* 比赛完成时间
*/
private LocalDateTime finishTime;
/**
* 比赛用时(秒)
*/
private Integer duration;
/**
* 比赛名次
*/
private Integer matchRank;
/**
* 骑行总长度
*/
private BigDecimal distance;
/**
* 爬坡距离
*/
private BigDecimal climbDistance;
/**
* 平均功率
*/
private BigDecimal avgFtp;
/**
* 平均速度
*/
private BigDecimal avgSpeed;
/**
* 获攒数量
*/
private Integer praiseNum;
/**
* 比赛状态10:完成比赛 20:未完成比赛
*/
private Integer status;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
}
package com.antai.sport.http.server.repository.simplematch.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author liming
* @since 2022-04-11
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SimpleMatchPlayerRegistLog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 比赛id
*/
private Long matchId;
/**
* 玩家id
*/
private Long playerId;
/**
* 创建时间
*/
private LocalDateTime createTime;
}
package com.antai.sport.http.server.repository.simplematch.mapper;
import com.antai.sport.http.server.repository.simplematch.entity.SimpleMatchBanner;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author liming
* @since 2022-04-11
*/
public interface SimpleMatchBannerMapper extends BaseMapper<SimpleMatchBanner> {
}
package com.antai.sport.http.server.repository.simplematch.mapper;
import com.antai.sport.http.server.repository.simplematch.entity.SimpleMatch;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author liming
* @since 2022-04-11
*/
public interface SimpleMatchMapper extends BaseMapper<SimpleMatch> {
}
package com.antai.sport.http.server.repository.simplematch.mapper;
import com.antai.sport.http.server.repository.simplematch.entity.SimpleMatchPlayerRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author liming
* @since 2022-04-11
*/
public interface SimpleMatchPlayerRecordMapper extends BaseMapper<SimpleMatchPlayerRecord> {
}
package com.antai.sport.http.server.repository.simplematch.mapper;
import com.antai.sport.http.server.repository.simplematch.entity.SimpleMatchPlayerRegistLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author liming
* @since 2022-04-11
*/
public interface SimpleMatchPlayerRegistLogMapper extends BaseMapper<SimpleMatchPlayerRegistLog> {
}
...@@ -31,7 +31,17 @@ public class TourRecord implements Serializable { ...@@ -31,7 +31,17 @@ public class TourRecord implements Serializable {
/** /**
* 用户id * 用户id
*/ */
private Long userId; private Long playerId;
/**
* 地图
*/
private String map;
/**
* 赛道
*/
private String path;
/** /**
* 骑行时长(秒) * 骑行时长(秒)
......
<?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.repository.simplematch.mapper.SimpleMatchBannerMapper">
</mapper>
<?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.repository.simplematch.mapper.SimpleMatchMapper">
</mapper>
<?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.repository.simplematch.mapper.SimpleMatchPlayerRecordMapper">
</mapper>
<?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.repository.simplematch.mapper.SimpleMatchPlayerRegistLogMapper">
</mapper>
package com.antai.sport.http.server.server.api.business.simplematch.controller;
import com.antai.sport.http.server.common.base.Result;
import com.antai.sport.http.server.server.api.business.simplematch.dto.ReqSimpleMatchInit;
import com.antai.sport.http.server.server.api.business.simplematch.dto.RespSimpleMatchBanner;
import com.antai.sport.http.server.server.api.business.simplematch.service.SimpleMatchService;
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 java.util.List;
import static com.antai.sport.http.server.common.util.ResultUtil.success;
@RequestMapping("/simple/match")
@RestController
@Api(tags = {"日常赛"})
public class SimpleMatchController {
@Resource
private SimpleMatchService simpleMatchService;
@ApiOperation("日常赛初始化")
@PostMapping("init")
public ResponseEntity<Result> init(@RequestBody ReqSimpleMatchInit initData) {
simpleMatchService.init(initData);
return success();
}
@ApiOperation("获取banner地址")
@GetMapping("/banner/list")
public ResponseEntity<Result<List<RespSimpleMatchBanner>>> getSimpleMatchBannerList() {
return success(simpleMatchService.getSimpleMatchBannerList());
}
}
package com.antai.sport.http.server.server.api.business.simplematch.converter;
import com.antai.sport.http.server.repository.simplematch.entity.SimpleMatch;
import com.antai.sport.http.server.repository.simplematch.entity.SimpleMatchBanner;
import com.antai.sport.http.server.server.api.business.simplematch.dto.ReqSimpleMatchInit;
import com.antai.sport.http.server.server.api.business.simplematch.dto.RespSimpleMatchBanner;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring")
public interface SimpleMatchConverter {
SimpleMatch toSimpleMatch(ReqSimpleMatchInit data);
List<RespSimpleMatchBanner> toRespBannerList(List<SimpleMatchBanner> bannerList);
}
package com.antai.sport.http.server.server.api.business.simplematch.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 ReqSimpleMatchInit {
@ApiModelProperty("比赛名称")
private String name;
@ApiModelProperty("比赛logo图片地址")
private String logo;
@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("总长度")
private BigDecimal distance;
@ApiModelProperty("爬坡高度")
private BigDecimal climbDistance;
@ApiModelProperty("描述")
private String description;
@ApiModelProperty("排序号")
private Integer showOrder;
}
package com.antai.sport.http.server.server.api.business.simplematch.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("日常赛Banner")
public class RespSimpleMatchBanner {
@ApiModelProperty("banner图片路径")
private String imgUrl;
}
package com.antai.sport.http.server.server.api.business.simplematch.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.simplematch.entity.SimpleMatch;
import com.antai.sport.http.server.repository.simplematch.entity.SimpleMatchBanner;
import com.antai.sport.http.server.repository.simplematch.mapper.SimpleMatchBannerMapper;
import com.antai.sport.http.server.repository.simplematch.mapper.SimpleMatchMapper;
import com.antai.sport.http.server.server.api.business.simplematch.converter.SimpleMatchConverter;
import com.antai.sport.http.server.server.api.business.simplematch.dto.ReqSimpleMatchInit;
import com.antai.sport.http.server.server.api.business.simplematch.dto.RespSimpleMatchBanner;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
public class SimpleMatchService {
@Resource
private SimpleMatchMapper simpleMatchMapper;
@Resource
private SimpleMatchBannerMapper simpleMatchBannerMapper;
@Resource
private SimpleMatchConverter simpleMatchConverter;
/**
* 创建比赛
*
* @param initData
*/
public void init(ReqSimpleMatchInit initData) {
if (StringUtils.isBlank(initData.getName())) {
throw new BusinessException("比赛名称不能为空");
}
if (initData.getEntryTime() == null || initData.getStartTime() == null ||
initData.getEndTime() == null) {
throw new BusinessException("所有输入时间不能为空");
}
if (initData.getEntryTime().equals(initData.getStartTime()) ||
initData.getEntryTime().isAfter(initData.getStartTime())) {
throw new BusinessException("允许进入时间必须早于比赛开始时间");
}
if (initData.getStartTime().equals(initData.getEndTime()) ||
initData.getStartTime().isAfter(initData.getEndTime())) {
throw new BusinessException("比赛开始时间必须早于比赛结束时间");
}
SimpleMatch simpleMatch = simpleMatchConverter.toSimpleMatch(initData);
simpleMatchMapper.insert(simpleMatch);
}
public List<RespSimpleMatchBanner> getSimpleMatchBannerList() {
QueryWrapper<SimpleMatchBanner> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("deleted", DeleteStatus.UNDELETED)
.orderBy(true, true, "show_order");
List<SimpleMatchBanner> bannerList = simpleMatchBannerMapper.selectList(queryWrapper);
return simpleMatchConverter.toRespBannerList(bannerList);
}
}
package com.antai.sport.http.server.server.api.business.tour.controller; package com.antai.sport.http.server.server.api.business.tour.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.tour.dto.ReqTourRecordInit;
import com.antai.sport.http.server.server.api.business.tour.dto.RespTourRecordInit; import com.antai.sport.http.server.server.api.business.tour.dto.RespTourRecordInit;
import com.antai.sport.http.server.server.api.business.tour.service.TourService; import com.antai.sport.http.server.server.api.business.tour.service.TourService;
import com.antai.sport.http.server.server.api.common.dto.CyclingDataDTO; import com.antai.sport.http.server.server.api.common.dto.CyclingDataDTO;
...@@ -24,9 +25,9 @@ public class TourController { ...@@ -24,9 +25,9 @@ public class TourController {
private TourService tourService; private TourService tourService;
@ApiOperation("初始化漫游记录") @ApiOperation("初始化漫游记录")
@GetMapping("/{userId}") @PostMapping("/init")
public ResponseEntity<Result<RespTourRecordInit>> init(@PathVariable("userId") Long userId) { public ResponseEntity<Result<RespTourRecordInit>> init(@RequestBody ReqTourRecordInit initData) {
return success(tourService.init(userId)); return success(tourService.init(initData));
} }
@ApiOperation("漫游记录上传") @ApiOperation("漫游记录上传")
......
package com.antai.sport.http.server.server.api.business.tour.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("漫游初始化对象")
public class ReqTourRecordInit {
@ApiModelProperty("用户id")
private Long playerId;
@ApiModelProperty("地图")
private String map;
@ApiModelProperty("赛道")
private String path;
}
...@@ -7,6 +7,7 @@ import com.antai.sport.http.server.repository.tour.entity.TourRecord; ...@@ -7,6 +7,7 @@ import com.antai.sport.http.server.repository.tour.entity.TourRecord;
import com.antai.sport.http.server.repository.tour.mapper.TourRecordMapper; import com.antai.sport.http.server.repository.tour.mapper.TourRecordMapper;
import com.antai.sport.http.server.server.api.business.praise.service.PraiseService; import com.antai.sport.http.server.server.api.business.praise.service.PraiseService;
import com.antai.sport.http.server.server.api.business.tour.converter.TourRecordConverter; import com.antai.sport.http.server.server.api.business.tour.converter.TourRecordConverter;
import com.antai.sport.http.server.server.api.business.tour.dto.ReqTourRecordInit;
import com.antai.sport.http.server.server.api.business.tour.dto.RespTourRecordInit; import com.antai.sport.http.server.server.api.business.tour.dto.RespTourRecordInit;
import com.antai.sport.http.server.server.api.common.dto.CyclingDataDTO; import com.antai.sport.http.server.server.api.common.dto.CyclingDataDTO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -30,16 +31,19 @@ public class TourService { ...@@ -30,16 +31,19 @@ public class TourService {
/** /**
* 初始化漫游记录 * 初始化漫游记录
* *
* @param userId * @param initData
* @return * @return
*/ */
public RespTourRecordInit init(Long userId) { public RespTourRecordInit init(ReqTourRecordInit initData) {
RespTourRecordInit resp = new RespTourRecordInit(); RespTourRecordInit resp = new RespTourRecordInit();
TourRecord tourRecord = new TourRecord(); TourRecord tourRecord = new TourRecord();
tourRecord.setUserId(userId); tourRecord.setPlayerId(initData.getPlayerId());
tourRecord.setMap(initData.getMap());
tourRecord.setPath(initData.getPath());
tourRecord.setCreateTime(LocalDateTime.now()); tourRecord.setCreateTime(LocalDateTime.now());
tourRecord.setStatus(TourRecordStatus.UNCOMMITTED); tourRecord.setStatus(TourRecordStatus.UNCOMMITTED);
tourRecordMapper.insert(tourRecord); tourRecordMapper.insert(tourRecord);
resp.setRecordId(tourRecord.getId()); resp.setRecordId(tourRecord.getId());
resp.setSportType(SportType.BICYCLE); resp.setSportType(SportType.BICYCLE);
resp.setGameMode(GameMode.TOUR); resp.setGameMode(GameMode.TOUR);
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
from room_mode_player_record t1 from room_mode_player_record t1
left join sport_user t2 on t1.player_id = t2.id left join sport_user t2 on t1.player_id = t2.id
where t1.room_id = #{roomId} where t1.room_id = #{roomId}
order by match_rank asc
</select> </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