Commit bff92e53 authored by liming's avatar liming

增加汇总统计接口

parent e202e23c
package com.antai.sport.http.server.constants;
public class SportType {
//骑行
public final static Integer BICYCLE = 1;
//跑步
public final static Integer RUN = 2;
}
package com.antai.sport.http.server.constants;
public class TrainType {
//漫游
public final static Integer NORMAL = 1;
//课程
public final static Integer COURSE = 2;
}
package com.antai.sport.http.server.game.api.business.match.bicycle; package com.antai.sport.http.server.game.api.business.match.bicycle;
import com.antai.sport.http.server.constants.SportType;
import com.antai.sport.http.server.game.api.business.match.bicycle.dto.DtoMatchBicycleResult; import com.antai.sport.http.server.game.api.business.match.bicycle.dto.DtoMatchBicycleResult;
import com.antai.sport.http.server.game.api.business.sport.user.SportUserSummaryService;
import com.antai.sport.http.server.repository.match.entity.MatchBicyclePlayer; import com.antai.sport.http.server.repository.match.entity.MatchBicyclePlayer;
import com.antai.sport.http.server.repository.match.mapper.MatchBicyclePlayerMapper; import com.antai.sport.http.server.repository.match.mapper.MatchBicyclePlayerMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -20,12 +23,15 @@ import java.util.List; ...@@ -20,12 +23,15 @@ import java.util.List;
public class MatchBicyclePlayerService extends ServiceImpl<MatchBicyclePlayerMapper, MatchBicyclePlayer> { public class MatchBicyclePlayerService extends ServiceImpl<MatchBicyclePlayerMapper, MatchBicyclePlayer> {
@Resource @Resource
private MatchBicycleBusinessMapper matchBicycleBusinessMapper; private MatchBicycleBusinessMapper matchBicycleBusinessMapper;
@Resource
private SportUserSummaryService sportUserSummaryService;
/** /**
* 保存比赛结果 * 保存比赛结果
* *
* @param resultList * @param resultList
*/ */
@Transactional
public void saveMatchBicyclePlayerRecord(List<DtoMatchBicycleResult> resultList) { public void saveMatchBicyclePlayerRecord(List<DtoMatchBicycleResult> resultList) {
if (resultList == null || resultList.isEmpty()) { if (resultList == null || resultList.isEmpty()) {
return; return;
...@@ -45,6 +51,8 @@ public class MatchBicyclePlayerService extends ServiceImpl<MatchBicyclePlayerMap ...@@ -45,6 +51,8 @@ public class MatchBicyclePlayerService extends ServiceImpl<MatchBicyclePlayerMap
record.setAvgSpeed(item.getAvgSpeed()); record.setAvgSpeed(item.getAvgSpeed());
record.setStatus(item.getStatus()); record.setStatus(item.getStatus());
saveList.add(record); saveList.add(record);
sportUserSummaryService.summary(item.getUserId(), SportType.BICYCLE, item.getDistance(), item.getClimbDistance(), item.getDuration());
} }
this.saveBatch(saveList); this.saveBatch(saveList);
} }
......
...@@ -57,7 +57,7 @@ public class SportUserController { ...@@ -57,7 +57,7 @@ public class SportUserController {
@ApiOperation(value = "用户基本信息获取") @ApiOperation(value = "用户基本信息获取")
@GetMapping("/user/info") @GetMapping("/user/info")
public ResponseEntity<Result<RespBaseUserInfo>> getUserInfo(@LoginSportUser SportUser loginUser) { public ResponseEntity<Result<RespBaseUserInfo>> getUserInfo(@LoginSportUser SportUser loginUser) {
return success(new RespBaseUserInfo(loginUser)); return success(sportUserService.getUserInfo(loginUser));
} }
@ApiOperation(value = "用户皮肤获取", notes = "返回data中为map:其中key是部位key,value是皮肤key") @ApiOperation(value = "用户皮肤获取", notes = "返回data中为map:其中key是部位key,value是皮肤key")
......
...@@ -11,16 +11,11 @@ import com.antai.sport.http.server.common.util.RandomUtil; ...@@ -11,16 +11,11 @@ import com.antai.sport.http.server.common.util.RandomUtil;
import com.antai.sport.http.server.common.vo.SysCodeDetailVO; import com.antai.sport.http.server.common.vo.SysCodeDetailVO;
import com.antai.sport.http.server.constants.DeleteStatus; import com.antai.sport.http.server.constants.DeleteStatus;
import com.antai.sport.http.server.constants.LoginMode; import com.antai.sport.http.server.constants.LoginMode;
import com.antai.sport.http.server.constants.SportType;
import com.antai.sport.http.server.constants.SysCodeConstants; import com.antai.sport.http.server.constants.SysCodeConstants;
import com.antai.sport.http.server.game.api.business.sport.user.dto.*; import com.antai.sport.http.server.game.api.business.sport.user.dto.*;
import com.antai.sport.http.server.repository.sport.entity.SportSection; import com.antai.sport.http.server.repository.sport.entity.*;
import com.antai.sport.http.server.repository.sport.entity.SportSectionSkin; import com.antai.sport.http.server.repository.sport.mapper.*;
import com.antai.sport.http.server.repository.sport.entity.SportUser;
import com.antai.sport.http.server.repository.sport.entity.SportUserSectionSkin;
import com.antai.sport.http.server.repository.sport.mapper.SportSectionMapper;
import com.antai.sport.http.server.repository.sport.mapper.SportSectionSkinMapper;
import com.antai.sport.http.server.repository.sport.mapper.SportUserMapper;
import com.antai.sport.http.server.repository.sport.mapper.SportUserSectionSkinMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -48,6 +43,8 @@ public class SportUserService { ...@@ -48,6 +43,8 @@ public class SportUserService {
private long loginSmsCaptchaExpire; private long loginSmsCaptchaExpire;
@Value("#{'${spring.profiles.active}'.equals('prod')}") @Value("#{'${spring.profiles.active}'.equals('prod')}")
private boolean isProd; private boolean isProd;
@Resource
private SportUserSummaryMapper sportUserSummaryMapper;
@Resource @Resource
private SportUserMapper sportUserMapper; private SportUserMapper sportUserMapper;
...@@ -300,4 +297,26 @@ public class SportUserService { ...@@ -300,4 +297,26 @@ public class SportUserService {
} }
return result; return result;
} }
public RespBaseUserInfo getUserInfo(SportUser loginUser) {
RespBaseUserInfo userInfo = new RespBaseUserInfo(loginUser);
QueryWrapper<SportUserSummary> summaryQuery = new QueryWrapper<>();
summaryQuery.eq("deleted", DeleteStatus.UNDELETED);
summaryQuery.eq("user_id", loginUser.getId());
List<SportUserSummary> summaryList = sportUserSummaryMapper.selectList(summaryQuery);
for (SportUserSummary item : summaryList) {
if (item.getType().equals(SportType.BICYCLE)) {
userInfo.setBicycleSummary(new RespSportUserSummary(item));
} else {
userInfo.setRunSummary(new RespSportUserSummary(item));
}
}
if (userInfo.getBicycleSummary() == null) {
userInfo.setBicycleSummary(new RespSportUserSummary(null));
}
if (userInfo.getRunSummary() == null) {
userInfo.setRunSummary(new RespSportUserSummary(null));
}
return userInfo;
}
} }
package com.antai.sport.http.server.game.api.business.sport.user;
import com.antai.sport.http.server.constants.DeleteStatus;
import com.antai.sport.http.server.repository.sport.entity.SportUserSummary;
import com.antai.sport.http.server.repository.sport.mapper.SportUserSummaryMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
@Service
public class SportUserSummaryService {
@Resource
private SportUserSummaryMapper sportUserSummaryMapper;
public void summary(Long userId, Integer type, BigDecimal distance, BigDecimal climbDistance, Integer duration) {
QueryWrapper<SportUserSummary> summaryQuery = new QueryWrapper<>();
summaryQuery.eq("deleted", DeleteStatus.UNDELETED);
summaryQuery.eq("user_id", userId);
summaryQuery.eq("type", type);
SportUserSummary summary = sportUserSummaryMapper.selectOne(summaryQuery);
if (summary == null) {
summary = new SportUserSummary();
summary.setUserId(userId);
summary.setType(type);
summary.setTotalDistance(BigDecimal.ZERO);
summary.setTotalClimbDistance(BigDecimal.ZERO);
summary.setTotalDuration(0);
}
summary.setTotalDuration(summary.getTotalDuration() + duration);
summary.setTotalDistance(summary.getTotalDistance().add(distance));
summary.setTotalClimbDistance(summary.getTotalClimbDistance().add(climbDistance));
if (summary.getId() == null) {
sportUserSummaryMapper.insert(summary);
} else {
sportUserSummaryMapper.updateById(summary);
}
}
}
...@@ -32,9 +32,6 @@ public class RespBaseUserInfo { ...@@ -32,9 +32,6 @@ public class RespBaseUserInfo {
infoInitialized = sportUser.getInfoInitialized(); infoInitialized = sportUser.getInfoInitialized();
roleInitialized = sportUser.getRoleInitialized(); roleInitialized = sportUser.getRoleInitialized();
equipmentInitialized = sportUser.getEquipmentInitialized(); equipmentInitialized = sportUser.getEquipmentInitialized();
totalClimbDistance = 0;
totalDistance = 0;
totalGameHours = 0;
} }
@ApiModelProperty(value = "手机号") @ApiModelProperty(value = "手机号")
...@@ -79,13 +76,9 @@ public class RespBaseUserInfo { ...@@ -79,13 +76,9 @@ public class RespBaseUserInfo {
@ApiModelProperty(value = "是否已经初始化设备") @ApiModelProperty(value = "是否已经初始化设备")
private Boolean equipmentInitialized; private Boolean equipmentInitialized;
@ApiModelProperty(value = "总骑行距离") @ApiModelProperty(value = "骑行数据汇总")
private Integer totalDistance; private RespSportUserSummary bicycleSummary;
@ApiModelProperty(value = "总爬坡高度")
private Integer totalClimbDistance;
@ApiModelProperty(value = "总骑行时间")
private Integer totalGameHours;
@ApiModelProperty(value = "跑步数据汇总")
private RespSportUserSummary runSummary;
} }
package com.antai.sport.http.server.game.api.business.sport.user.dto;
import com.antai.sport.http.server.repository.sport.entity.SportUserSummary;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel("运动数据汇总")
public class RespSportUserSummary {
public RespSportUserSummary() {
}
public RespSportUserSummary(SportUserSummary summary) {
if (summary == null) {
totalDistance = BigDecimal.ZERO;
totalClimbDistance = BigDecimal.ZERO;
totalDuration = 0;
} else {
totalDistance = summary.getTotalDistance();
totalClimbDistance = summary.getTotalClimbDistance();
totalDuration = summary.getTotalDuration();
}
}
@ApiModelProperty("总骑行距离")
private BigDecimal totalDistance;
@ApiModelProperty("总爬坡高度")
private BigDecimal totalClimbDistance;
@ApiModelProperty("总持续时长")
private Integer totalDuration;
}
package com.antai.sport.http.server.repository.sport.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 2021-09-26
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SportUserSummary implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 汇总类型 1.骑行 2.跑步
*/
private Integer type;
/**
* 用户id
*/
private Long userId;
/**
* 总骑行距离
*/
private BigDecimal totalDistance;
/**
* 总爬坡高度
*/
private BigDecimal totalClimbDistance;
/**
* 总持续时长(秒)
*/
private Integer totalDuration;
/**
* 版本号
*/
private Long version;
/**
* 删除标记
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime ctDate;
/**
* 修改人id
*/
private Long lmUserId;
/**
* 修改时间
*/
private LocalDateTime lmDate;
}
package com.antai.sport.http.server.repository.sport.mapper;
import com.antai.sport.http.server.repository.sport.entity.SportUserSummary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 运动记录汇总 Mapper 接口
* </p>
*
* @author liming
* @since 2021-09-26
*/
public interface SportUserSummaryMapper extends BaseMapper<SportUserSummary> {
}
package com.antai.sport.http.server.repository.train.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 2021-09-26
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class TrainBicycleRecord implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 训练类型 1.漫游骑行 2.课程训练
*/
private Integer type;
/**
* 用户id
*/
private Long userId;
/**
* 开始时间
*/
private LocalDateTime startTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 骑行时长(秒)
*/
private Integer duration;
/**
* 爬坡距离
*/
private BigDecimal climbDistance;
/**
* 骑行总长度
*/
private BigDecimal distance;
/**
* 平均功率
*/
private BigDecimal avgFtp;
/**
* 平均速度
*/
private BigDecimal avgSpeed;
/**
* 版本号
*/
private Long version;
/**
* 删除标记
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime ctDate;
/**
* 修改人id
*/
private Long lmUserId;
/**
* 修改时间
*/
private LocalDateTime lmDate;
}
package com.antai.sport.http.server.repository.train.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 2021-09-26
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class TrainRunRecord implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 训练类型 1.漫游骑行 2.课程训练
*/
private Integer type;
/**
* 用户id
*/
private Long userId;
/**
* 开始时间
*/
private LocalDateTime startTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 骑行时长(秒)
*/
private Integer duration;
/**
* 爬坡距离
*/
private BigDecimal climbDistance;
/**
* 骑行总长度
*/
private BigDecimal distance;
/**
* 平均速度
*/
private BigDecimal avgSpeed;
/**
* 配速
*/
private BigDecimal pace;
/**
* 版本号
*/
private Long version;
/**
* 删除标记
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime ctDate;
/**
* 修改人id
*/
private Long lmUserId;
/**
* 修改时间
*/
private LocalDateTime lmDate;
}
package com.antai.sport.http.server.repository.train.mapper;
import com.antai.sport.http.server.repository.train.entity.TrainBicycleRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 骑行训练运动记录 Mapper 接口
* </p>
*
* @author liming
* @since 2021-09-26
*/
public interface TrainBicycleRecordMapper extends BaseMapper<TrainBicycleRecord> {
}
package com.antai.sport.http.server.repository.train.mapper;
import com.antai.sport.http.server.repository.train.entity.TrainRunRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 跑步训练运动记录 Mapper 接口
* </p>
*
* @author liming
* @since 2021-09-26
*/
public interface TrainRunRecordMapper extends BaseMapper<TrainRunRecord> {
}
<?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.sport.mapper.SportUserSummaryMapper">
</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.train.mapper.TrainBicycleRecordMapper">
</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.train.mapper.TrainRunRecordMapper">
</mapper>
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