Commit 8467c245 authored by liming's avatar liming

运动数据上传增加成就计算

parent 7a8db2d0
...@@ -2,4 +2,10 @@ package com.antai.sport.http.server.constants; ...@@ -2,4 +2,10 @@ package com.antai.sport.http.server.constants;
public class AchievementCondition { public class AchievementCondition {
public static final Integer SIGN_IN_DAYS = 10; public static final Integer SIGN_IN_DAYS = 10;
public static final Integer TEAM_TRAINING = 20;
public static final Integer SIMPLE_MATCH = 30;
public static final Integer ROOM_MODE = 40;
public static final Integer DISTANCE = 50;
public static final Integer CLIMB_DISTANCE = 60;
public static final Integer CALORIE = 70;
} }
...@@ -2,9 +2,11 @@ package com.antai.sport.http.server.server.api.business.achievement.service; ...@@ -2,9 +2,11 @@ package com.antai.sport.http.server.server.api.business.achievement.service;
import com.antai.sport.http.server.constants.AchievementCondition; import com.antai.sport.http.server.constants.AchievementCondition;
import com.antai.sport.http.server.constants.GameCurrencySourceType; import com.antai.sport.http.server.constants.GameCurrencySourceType;
import com.antai.sport.http.server.constants.GameMode;
import com.antai.sport.http.server.repository.achievement.entity.Achievement; import com.antai.sport.http.server.repository.achievement.entity.Achievement;
import com.antai.sport.http.server.repository.achievement.entity.AchievementForSportUser; import com.antai.sport.http.server.repository.achievement.entity.AchievementForSportUser;
import com.antai.sport.http.server.repository.achievement.mapper.AchievementForSportUserMapper; import com.antai.sport.http.server.repository.achievement.mapper.AchievementForSportUserMapper;
import com.antai.sport.http.server.repository.sport.entity.SportUserSummary;
import com.antai.sport.http.server.server.api.business.achievement.mapper.AchievementBizMapper; import com.antai.sport.http.server.server.api.business.achievement.mapper.AchievementBizMapper;
import com.antai.sport.http.server.server.api.business.sportusergamecurrency.service.SportUserGameCurrencyService; import com.antai.sport.http.server.server.api.business.sportusergamecurrency.service.SportUserGameCurrencyService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -31,10 +33,50 @@ public class AchievementService { ...@@ -31,10 +33,50 @@ public class AchievementService {
* @param sportUserId * @param sportUserId
*/ */
public void handleSignInAchievement(Long sportUserId, Integer continuousLoginDays) { public void handleSignInAchievement(Long sportUserId, Integer continuousLoginDays) {
List<Achievement> achievementList = this.initAchievement(sportUserId, AchievementCondition.SIGN_IN_DAYS, continuousLoginDays);
achievementBizMapper.getSignInAchievement(AchievementCondition.SIGN_IN_DAYS, sportUserId); }
/**
* 处理运动类成就
* 先完成业务后面再考虑性能优化
*
* @param gameMode
* @param summary
*/
public void handleSportAchievement(Integer gameMode, SportUserSummary summary) {
if (gameMode.equals(GameMode.GROUP_TRAINING)) {
initAchievement(summary.getUserId(), AchievementCondition.TEAM_TRAINING,
summary.getTotalTeamTrainingFinishNum());
}
if (gameMode.equals(GameMode.SIMPLE_MATCH)) {
initAchievement(summary.getUserId(), AchievementCondition.SIMPLE_MATCH,
summary.getTotalSimpleMatchFinishNum());
}
if (gameMode.equals(GameMode.ROOM_MODE)) {
initAchievement(summary.getUserId(), AchievementCondition.ROOM_MODE, summary.getTotalGameModeFinishNum());
}
initAchievement(summary.getUserId(), AchievementCondition.DISTANCE, summary.getTotalDistance().intValue());
initAchievement(summary.getUserId(), AchievementCondition.CLIMB_DISTANCE,
summary.getTotalClimbDistance().intValue());
initAchievement(summary.getUserId(), AchievementCondition.CALORIE, summary.getTotalCalorie());
}
/**
* 成就计算和积分操作
*
* @param sportUserId
* @param condition
* @param conditionValue
*/
private void initAchievement(Long sportUserId, Integer condition, Integer conditionValue) {
if (conditionValue == null) {
return;
}
List<Achievement> achievementList = achievementBizMapper.getSignInAchievement(condition, sportUserId);
for (Achievement achievement : achievementList) { for (Achievement achievement : achievementList) {
if (continuousLoginDays.compareTo(achievement.getConditionValue()) >= 0) { if (conditionValue.compareTo(achievement.getConditionValue()) >= 0) {
AchievementForSportUser achievementForSportUser = new AchievementForSportUser(); AchievementForSportUser achievementForSportUser = new AchievementForSportUser();
achievementForSportUser.setSportUserId(sportUserId); achievementForSportUser.setSportUserId(sportUserId);
achievementForSportUser.setAchievementId(achievement.getId()); achievementForSportUser.setAchievementId(achievement.getId());
...@@ -42,7 +84,7 @@ public class AchievementService { ...@@ -42,7 +84,7 @@ public class AchievementService {
achievementForSportUser.setCreateTime(LocalDateTime.now()); achievementForSportUser.setCreateTime(LocalDateTime.now());
achievementForSportUserMapper.insert(achievementForSportUser); achievementForSportUserMapper.insert(achievementForSportUser);
sportUserGameCurrencyService.addCurrency(sportUserId, achievement.getCurrency(), sportUserGameCurrencyService.addCurrency(sportUserId, achievement.getCurrency(),
GameCurrencySourceType.ACHIEVEMENT, achievement.getId()); GameCurrencySourceType.ACHIEVEMENT, achievementForSportUser.getId());
} }
} }
} }
......
...@@ -17,6 +17,7 @@ import com.antai.sport.http.server.repository.sport.entity.*; ...@@ -17,6 +17,7 @@ import com.antai.sport.http.server.repository.sport.entity.*;
import com.antai.sport.http.server.repository.sport.mapper.*; import com.antai.sport.http.server.repository.sport.mapper.*;
import com.antai.sport.http.server.repository.teamtraining.entity.TeamTraining; import com.antai.sport.http.server.repository.teamtraining.entity.TeamTraining;
import com.antai.sport.http.server.repository.teamtraining.mapper.TeamTrainingMapper; import com.antai.sport.http.server.repository.teamtraining.mapper.TeamTrainingMapper;
import com.antai.sport.http.server.server.api.business.achievement.service.AchievementService;
import com.antai.sport.http.server.server.api.business.simplematch.dto.SimpleMatchUserScheduleVO; 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.simplematch.mapper.SimpleMatchBusinessMapper;
import com.antai.sport.http.server.server.api.business.sportusergamecurrency.service.SportUserGameCurrencyService; import com.antai.sport.http.server.server.api.business.sportusergamecurrency.service.SportUserGameCurrencyService;
...@@ -90,6 +91,8 @@ public class SportUserTrainingLogService { ...@@ -90,6 +91,8 @@ public class SportUserTrainingLogService {
@Resource @Resource
private SportUserGameCurrencyService sportUserGameCurrencyService; private SportUserGameCurrencyService sportUserGameCurrencyService;
@Resource
private AchievementService achievementService;
public void createBicycleTrainingLog(Long playerId, Integer gameMode, Long sourceId, String sourceName, public void createBicycleTrainingLog(Long playerId, Integer gameMode, Long sourceId, String sourceName,
String map, String path, Integer praiseNum, CyclingDataDTO sportData) { String map, String path, Integer praiseNum, CyclingDataDTO sportData) {
...@@ -114,7 +117,7 @@ public class SportUserTrainingLogService { ...@@ -114,7 +117,7 @@ public class SportUserTrainingLogService {
} }
sportUserTrainingLogMapper.insert(log); sportUserTrainingLogMapper.insert(log);
//处理玩家记录汇总 //处理玩家记录汇总
this.handleSportUserSummary(playerId, log, gameMode, sportData); SportUserSummary summary = this.handleSportUserSummary(playerId, log, gameMode, sportData);
//处理俱乐部数据汇总 //处理俱乐部数据汇总
this.handleClubSummary(clubMember, log); this.handleClubSummary(clubMember, log);
//处理月度排行 //处理月度排行
...@@ -123,6 +126,8 @@ public class SportUserTrainingLogService { ...@@ -123,6 +126,8 @@ public class SportUserTrainingLogService {
this.modifyTotalRank(playerId, log); this.modifyTotalRank(playerId, log);
//处理玩家积分 //处理玩家积分
this.handleSportUserCurrency(playerId, log.getId(), log.getCalorie(), gameMode, log.getMatchRank()); this.handleSportUserCurrency(playerId, log.getId(), log.getCalorie(), gameMode, log.getMatchRank());
//处理玩家成就
achievementService.handleSportAchievement(gameMode, summary);
} }
/** /**
...@@ -156,8 +161,8 @@ public class SportUserTrainingLogService { ...@@ -156,8 +161,8 @@ public class SportUserTrainingLogService {
* @param playerId * @param playerId
* @param log * @param log
*/ */
private void handleSportUserSummary(Long playerId, SportUserTrainingLog log, Integer gameMode, private SportUserSummary handleSportUserSummary(Long playerId, SportUserTrainingLog log, Integer gameMode,
CyclingDataDTO sportData) { CyclingDataDTO sportData) {
QueryWrapper<SportUserSummary> summaryQuery = new QueryWrapper<>(); QueryWrapper<SportUserSummary> summaryQuery = new QueryWrapper<>();
summaryQuery.eq("deleted", DeleteStatus.UNDELETED); summaryQuery.eq("deleted", DeleteStatus.UNDELETED);
summaryQuery.eq("user_id", playerId); summaryQuery.eq("user_id", playerId);
...@@ -196,6 +201,7 @@ public class SportUserTrainingLogService { ...@@ -196,6 +201,7 @@ public class SportUserTrainingLogService {
} else { } else {
sportUserSummaryMapper.updateById(summary); sportUserSummaryMapper.updateById(summary);
} }
return summary;
} }
/** /**
......
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