Commit 5556e11d authored by liming's avatar liming

漫游接口

parent 3b1d74e2
package com.antai.sport.http.server.constants;
//漫游记录状态
public class TourRecordStatus {
//未提交
public final static Integer UNCOMMITTED = 10;
//已提交
public final static Integer COMMITTED = 20;
}
...@@ -33,9 +33,9 @@ public class PraiseLog implements Serializable { ...@@ -33,9 +33,9 @@ public class PraiseLog implements Serializable {
private Integer type; private Integer type;
/** /**
* 源头数据id 比如漫游记录id 比赛赛事id 团练活动id等 * 骑行记录id
*/ */
private Long sourceId; private Long recordId;
/** /**
* 点赞用户id * 点赞用户id
......
package com.antai.sport.http.server.repository.tour.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 TourRecord implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 用户id
*/
private Long userId;
/**
* 骑行时长(秒)
*/
private Integer duration;
/**
* 骑行总长度
*/
private BigDecimal distance;
/**
* 爬坡距离
*/
private BigDecimal climbDistance;
/**
* 平均功率
*/
private BigDecimal avgFtp;
/**
* 平均速度
*/
private BigDecimal avgSpeed;
/**
* 获攒数量
*/
private Integer praiseNum;
/**
* 状态 10.未提交数据 20.已提交数据
*/
private Integer status;
/**
* 版本号
*/
private Long version;
/**
* 删除标记
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
}
package com.antai.sport.http.server.repository.tour.mapper;
import com.antai.sport.http.server.repository.tour.entity.TourRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author liming
* @since 2022-04-11
*/
public interface TourRecordMapper extends BaseMapper<TourRecord> {
}
<?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.tour.mapper.TourRecordMapper">
</mapper>
...@@ -9,8 +9,8 @@ import lombok.Data; ...@@ -9,8 +9,8 @@ import lombok.Data;
public class ReqPraise { public class ReqPraise {
@ApiModelProperty("点赞类型 10:漫游 20:日常赛 30:系列赛 40:课程训练 50: 团练") @ApiModelProperty("点赞类型 10:漫游 20:日常赛 30:系列赛 40:课程训练 50: 团练")
private Integer gameMode; private Integer gameMode;
@ApiModelProperty("源头数据id 比如漫游记录id 比赛赛事id 团练活动id等") @ApiModelProperty("骑行记录id")
private Long sourceId; private Long recordId;
@ApiModelProperty("点赞人") @ApiModelProperty("点赞人")
private Long from; private Long from;
@ApiModelProperty("被点赞人") @ApiModelProperty("被点赞人")
......
...@@ -41,15 +41,13 @@ public class PraiseService { ...@@ -41,15 +41,13 @@ public class PraiseService {
* 查询某次游戏全部点赞数 * 查询某次游戏全部点赞数
* *
* @param gameMode * @param gameMode
* @param sourceId * @param recordId
* @param userId
* @return * @return
*/ */
public Integer getActivityTotalPraise(Integer gameMode, Long sourceId, Long userId) { public Integer getPraiseByGameModeAndRecordId(Integer gameMode, Long recordId) {
QueryWrapper<PraiseLog> queryWrapper = new QueryWrapper<>(); QueryWrapper<PraiseLog> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type", gameMode); queryWrapper.eq("type", gameMode);
queryWrapper.eq("source_id", sourceId); queryWrapper.eq("record_id", recordId);
queryWrapper.eq("to_id", userId);
return praiseLogMapper.selectCount(queryWrapper); return praiseLogMapper.selectCount(queryWrapper);
} }
} }
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.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.common.dto.CyclingDataDTO;
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("tour")
@RestController
@Api(tags = {"漫游模式"})
public class TourController {
@Resource
private TourService tourService;
@ApiOperation("初始化漫游记录")
@GetMapping("/{userId}")
public ResponseEntity<Result<RespTourRecordInit>> init(@PathVariable("userId") Long userId) {
return success(tourService.init(userId));
}
@ApiOperation("漫游记录上传")
@PostMapping("/record/upload")
public ResponseEntity<Result> upload(@RequestBody List<CyclingDataDTO> tourRecordList){
tourService.upload(tourRecordList);
return success();
}
}
package com.antai.sport.http.server.server.api.business.tour.converter;
import com.antai.sport.http.server.repository.tour.entity.TourRecord;
import com.antai.sport.http.server.server.api.common.dto.CyclingDataDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
@Mapper(componentModel = "spring")
public interface TourRecordConverter {
@Mappings({
@Mapping(source = "source.recordId", target = "id"),
@Mapping(source = "status", target = "status")
})
TourRecord convertToTourRecord(CyclingDataDTO source, Integer status);
}
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 RespTourRecordInit {
@ApiModelProperty("记录id")
private Long recordId;
@ApiModelProperty("运动类型")
private Integer sportType;
@ApiModelProperty("游戏模式")
private Integer gameMode;
}
package com.antai.sport.http.server.server.api.business.tour.service;
import com.antai.sport.http.server.constants.GameMode;
import com.antai.sport.http.server.constants.SportType;
import com.antai.sport.http.server.constants.TourRecordStatus;
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.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.dto.RespTourRecordInit;
import com.antai.sport.http.server.server.api.common.dto.CyclingDataDTO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class TourService {
@Resource
private TourRecordMapper tourRecordMapper;
@Resource
private TourRecordConverter tourRecordConverter;
@Resource
private PraiseService praiseService;
/**
* 初始化漫游记录
*
* @param userId
* @return
*/
public RespTourRecordInit init(Long userId) {
RespTourRecordInit resp = new RespTourRecordInit();
TourRecord tourRecord = new TourRecord();
tourRecord.setUserId(userId);
tourRecord.setCreateTime(LocalDateTime.now());
tourRecord.setStatus(TourRecordStatus.UNCOMMITTED);
tourRecordMapper.insert(tourRecord);
resp.setRecordId(tourRecord.getId());
resp.setSportType(SportType.BICYCLE);
resp.setGameMode(GameMode.TOUR);
return resp;
}
/**
* 上传漫游记录
*
* @param tourRecordList
*/
public void upload(List<CyclingDataDTO> tourRecordList) {
tourRecordList.forEach(item -> {
TourRecord tourRecord = tourRecordConverter.convertToTourRecord(item, TourRecordStatus.COMMITTED);
tourRecord.setPraiseNum(praiseService.getPraiseByGameModeAndRecordId(GameMode.TOUR, item.getRecordId()));
tourRecordMapper.updateById(tourRecord);
});
}
}
package com.antai.sport.http.server.server.api.common.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel("基础骑行数据上传对象")
public class CyclingDataDTO {
@ApiModelProperty("比赛名次(没有可以不填)")
private Integer matchRank;
@ApiModelProperty("记录id")
private Long recordId;
@ApiModelProperty("用时(秒)")
private Integer duration;
@ApiModelProperty("骑行总长度")
private BigDecimal distance;
@ApiModelProperty("爬坡高度")
private BigDecimal climbDistance;
@ApiModelProperty("平均功率")
private BigDecimal avgFtp;
@ApiModelProperty("平均速度")
private BigDecimal avgSpeed;
}
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