Commit 8467c245 authored by liming's avatar liming

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

parent 7a8db2d0
......@@ -2,4 +2,10 @@ package com.antai.sport.http.server.constants;
public class AchievementCondition {
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;
import com.antai.sport.http.server.constants.AchievementCondition;
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.AchievementForSportUser;
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.sportusergamecurrency.service.SportUserGameCurrencyService;
import org.springframework.stereotype.Service;
......@@ -31,10 +33,50 @@ public class AchievementService {
* @param sportUserId
*/
public void handleSignInAchievement(Long sportUserId, Integer continuousLoginDays) {
List<Achievement> achievementList =
achievementBizMapper.getSignInAchievement(AchievementCondition.SIGN_IN_DAYS, sportUserId);
this.initAchievement(sportUserId, AchievementCondition.SIGN_IN_DAYS, continuousLoginDays);
}
/**
* 处理运动类成就
* 先完成业务后面再考虑性能优化
*
* @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) {
if (continuousLoginDays.compareTo(achievement.getConditionValue()) >= 0) {
if (conditionValue.compareTo(achievement.getConditionValue()) >= 0) {
AchievementForSportUser achievementForSportUser = new AchievementForSportUser();
achievementForSportUser.setSportUserId(sportUserId);
achievementForSportUser.setAchievementId(achievement.getId());
......@@ -42,7 +84,7 @@ public class AchievementService {
achievementForSportUser.setCreateTime(LocalDateTime.now());
achievementForSportUserMapper.insert(achievementForSportUser);
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.*;
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.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.mapper.SimpleMatchBusinessMapper;
import com.antai.sport.http.server.server.api.business.sportusergamecurrency.service.SportUserGameCurrencyService;
......@@ -90,6 +91,8 @@ public class SportUserTrainingLogService {
@Resource
private SportUserGameCurrencyService sportUserGameCurrencyService;
@Resource
private AchievementService achievementService;
public void createBicycleTrainingLog(Long playerId, Integer gameMode, Long sourceId, String sourceName,
String map, String path, Integer praiseNum, CyclingDataDTO sportData) {
......@@ -114,7 +117,7 @@ public class SportUserTrainingLogService {
}
sportUserTrainingLogMapper.insert(log);
//处理玩家记录汇总
this.handleSportUserSummary(playerId, log, gameMode, sportData);
SportUserSummary summary = this.handleSportUserSummary(playerId, log, gameMode, sportData);
//处理俱乐部数据汇总
this.handleClubSummary(clubMember, log);
//处理月度排行
......@@ -123,6 +126,8 @@ public class SportUserTrainingLogService {
this.modifyTotalRank(playerId, log);
//处理玩家积分
this.handleSportUserCurrency(playerId, log.getId(), log.getCalorie(), gameMode, log.getMatchRank());
//处理玩家成就
achievementService.handleSportAchievement(gameMode, summary);
}
/**
......@@ -156,7 +161,7 @@ public class SportUserTrainingLogService {
* @param playerId
* @param log
*/
private void handleSportUserSummary(Long playerId, SportUserTrainingLog log, Integer gameMode,
private SportUserSummary handleSportUserSummary(Long playerId, SportUserTrainingLog log, Integer gameMode,
CyclingDataDTO sportData) {
QueryWrapper<SportUserSummary> summaryQuery = new QueryWrapper<>();
summaryQuery.eq("deleted", DeleteStatus.UNDELETED);
......@@ -196,6 +201,7 @@ public class SportUserTrainingLogService {
} else {
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