forked from Cookies_Github_mirror/AquaDX
[chusan] Add login bonus feature
This commit is contained in:
committed by
Dom Eori
parent
3f05b84c0f
commit
b858d9a2cd
@@ -2,14 +2,26 @@ package icu.samnyan.aqua.sega.chusan.handler.impl;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
|
||||
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameLoginBonus;
|
||||
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameLoginBonusPreset;
|
||||
import icu.samnyan.aqua.sega.chusan.model.response.CodeResp;
|
||||
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
|
||||
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem;
|
||||
import icu.samnyan.aqua.sega.chusan.model.userdata.UserLoginBonus;
|
||||
import icu.samnyan.aqua.sega.chusan.service.GameLoginBonusPresetService;
|
||||
import icu.samnyan.aqua.sega.chusan.service.GameLoginBonusService;
|
||||
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
|
||||
import icu.samnyan.aqua.sega.chusan.service.UserItemService;
|
||||
import icu.samnyan.aqua.sega.chusan.service.UserLoginBonusService;
|
||||
import icu.samnyan.aqua.sega.util.jackson.StringMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -23,18 +35,112 @@ public class GameLoginHandler implements BaseHandler {
|
||||
|
||||
private final StringMapper mapper;
|
||||
|
||||
private boolean enableLoginBonus = false;
|
||||
|
||||
private final UserDataService userDataService;
|
||||
|
||||
public GameLoginHandler(StringMapper mapper, UserDataService userDataService) {
|
||||
private final UserItemService userItemService;
|
||||
|
||||
private final GameLoginBonusPresetService gameLoginBonusPresetService;
|
||||
|
||||
private final GameLoginBonusService gameLoginBonusService;
|
||||
|
||||
private final UserLoginBonusService userLoginBonusService;
|
||||
|
||||
public GameLoginHandler(StringMapper mapper,
|
||||
@Value("${game.chusan.loginbonus-enable:}") boolean enableLoginBonus,
|
||||
UserDataService userDataService,
|
||||
UserItemService userItemService,
|
||||
GameLoginBonusPresetService gameLoginBonusPresetService,
|
||||
GameLoginBonusService gameLoginBonusService,
|
||||
UserLoginBonusService userLoginBonusService
|
||||
) {
|
||||
this.mapper = mapper;
|
||||
this.enableLoginBonus = enableLoginBonus;
|
||||
this.userDataService = userDataService;
|
||||
this.userItemService = userItemService;
|
||||
this.gameLoginBonusPresetService = gameLoginBonusPresetService;
|
||||
this.gameLoginBonusService = gameLoginBonusService;
|
||||
this.userLoginBonusService = userLoginBonusService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String handle(Map<String, Object> request) throws JsonProcessingException {
|
||||
String userId = (String) request.get("userId");
|
||||
Optional<UserData> userDataOptional = userDataService.getUserByExtId(userId);
|
||||
userDataOptional.ifPresent(userDataService::updateLoginTime);
|
||||
boolean userPresent = userDataOptional.isPresent();
|
||||
if (userPresent){
|
||||
userDataService.updateLoginTime(userDataOptional.get());
|
||||
if(this.enableLoginBonus){
|
||||
List<GameLoginBonusPreset> gameLoginBonusList = this.gameLoginBonusPresetService.getGameLoginBonusPresets(1);
|
||||
|
||||
for (GameLoginBonusPreset preset: gameLoginBonusList) {
|
||||
// check if a user already has some progress and if not, add the login bonus entry
|
||||
Optional<UserLoginBonus> userLoginBonus = userLoginBonusService.getUserLoginBonus(Integer.parseInt(userId), preset.getId());
|
||||
if (userLoginBonus.isEmpty()){
|
||||
UserLoginBonus u = new UserLoginBonus(1, Integer.parseInt(userId), preset.getId());
|
||||
userLoginBonusService.saveUserLoginBonus(u);
|
||||
userLoginBonus = userLoginBonusService.getUserLoginBonus(Integer.parseInt(userId), preset.getId());
|
||||
}
|
||||
UserLoginBonus userLoginBonusResult = userLoginBonus.get();
|
||||
if (userLoginBonusResult.isFinished()){
|
||||
continue;
|
||||
}
|
||||
// last login is 24 hours+ ago
|
||||
if (userLoginBonusResult.getLastUpdateDate().toEpochSecond(ZoneOffset.ofHours(0)) < (LocalDateTime.now().minusHours(24).toEpochSecond(ZoneOffset.ofHours(0)))){
|
||||
int bonusCount = userLoginBonusResult.getBonusCount() + 1;
|
||||
LocalDateTime lastUpdateDate = LocalDateTime.now();
|
||||
List<GameLoginBonus> allLoginBonus = gameLoginBonusService.getAllGameLoginBonus(preset.getId());
|
||||
if (allLoginBonus.size() == 0){
|
||||
logger.info("No bonus entry found for" + preset.getId());
|
||||
continue;
|
||||
}
|
||||
int maxNeededDays = allLoginBonus.get(0).getNeedLoginDayCount();
|
||||
|
||||
// if all items are redeemed, then don't show the login bonuses.
|
||||
boolean isFinished = false;
|
||||
if (bonusCount > maxNeededDays){
|
||||
if (preset.getId() < 3000){
|
||||
bonusCount = 1;
|
||||
}else{
|
||||
isFinished = true;
|
||||
}
|
||||
}
|
||||
Optional<GameLoginBonus> gameLoginBonus = this.gameLoginBonusService.getGameLoginBonusByDay(preset.getId(), bonusCount);
|
||||
if(gameLoginBonus.isPresent()){
|
||||
GameLoginBonus gameLoginBonusResult = gameLoginBonus.get();
|
||||
UserData userData = this.userDataService.getUserByExtId(userId).orElseThrow();
|
||||
UserItem userItem = new UserItem(userData);
|
||||
userItem.setItemId(gameLoginBonusResult.getPresentId());
|
||||
userItem.setItemKind(6);
|
||||
userItem.setStock(gameLoginBonusResult.getItemNum());
|
||||
userItem.setValid(true);
|
||||
this.userItemService.save(userItem);
|
||||
}
|
||||
Optional<UserLoginBonus> userLoginBonusOptional = this.userLoginBonusService.getUserLoginBonus(Integer.parseInt(userId), preset.getId());
|
||||
UserLoginBonus userLoginBonusSave;
|
||||
if(userLoginBonusOptional.isPresent()){
|
||||
userLoginBonusSave = userLoginBonusOptional.get();
|
||||
userLoginBonusSave.setBonusCount(bonusCount);
|
||||
userLoginBonusSave.setLastUpdateDate(lastUpdateDate);
|
||||
userLoginBonusSave.setWatched(false);
|
||||
userLoginBonusSave.setFinished(isFinished);
|
||||
}else{
|
||||
userLoginBonusSave = new UserLoginBonus();
|
||||
userLoginBonusSave.setUser(Integer.parseInt(userId));
|
||||
userLoginBonusSave.setPresetId(preset.getId());
|
||||
userLoginBonusSave.setVersion(1);
|
||||
userLoginBonusSave.setBonusCount(bonusCount);
|
||||
userLoginBonusSave.setLastUpdateDate(lastUpdateDate);
|
||||
userLoginBonusSave.setWatched(false);
|
||||
userLoginBonusSave.setFinished(isFinished);
|
||||
}
|
||||
|
||||
this.userLoginBonusService.saveUserLoginBonus(userLoginBonusSave);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String json = mapper.write(new CodeResp(1));
|
||||
logger.info("Response: " + json);
|
||||
|
||||
@@ -2,15 +2,23 @@ package icu.samnyan.aqua.sega.chusan.handler.impl;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
|
||||
import icu.samnyan.aqua.sega.chusan.model.userdata.UserLoginBonus;
|
||||
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
|
||||
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
|
||||
import icu.samnyan.aqua.sega.chusan.service.UserLoginBonusService;
|
||||
import icu.samnyan.aqua.sega.util.jackson.StringMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
@Component("ChusanGetUserLoginBonusHandler")
|
||||
public class GetUserLoginBonusHandler implements BaseHandler {
|
||||
@@ -19,9 +27,21 @@ public class GetUserLoginBonusHandler implements BaseHandler {
|
||||
|
||||
private final StringMapper mapper;
|
||||
|
||||
private boolean enableLoginBonus = false;
|
||||
|
||||
private final UserDataService userDataService;
|
||||
|
||||
private final UserLoginBonusService userLoginBonusService;
|
||||
|
||||
@Autowired
|
||||
public GetUserLoginBonusHandler(StringMapper mapper) {
|
||||
public GetUserLoginBonusHandler(StringMapper mapper,
|
||||
@Value("${game.chusan.loginbonus-enable:}") boolean enableLoginBonus,
|
||||
UserDataService userDataService,
|
||||
UserLoginBonusService userLoginBonusService) {
|
||||
this.mapper = mapper;
|
||||
this.enableLoginBonus = enableLoginBonus;
|
||||
this.userLoginBonusService = userLoginBonusService;
|
||||
this.userDataService = userDataService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -30,8 +50,23 @@ public class GetUserLoginBonusHandler implements BaseHandler {
|
||||
|
||||
Map<String, Object> resultMap = new LinkedHashMap<>();
|
||||
resultMap.put("userId", userId);
|
||||
resultMap.put("length", 0);
|
||||
resultMap.put("userLoginBonusList", List.of());
|
||||
if(!this.enableLoginBonus){
|
||||
resultMap.put("length", 0);
|
||||
resultMap.put("userLoginBonusList", List.of());
|
||||
}else{
|
||||
List<UserLoginBonus> userLoginBonusList = userLoginBonusService.getAllUserLoginBonus(Integer.parseInt(userId));
|
||||
List<Map<String, String>> retList = new ArrayList<>();
|
||||
resultMap.put("length", userLoginBonusList.size());
|
||||
for (UserLoginBonus u: userLoginBonusList) {
|
||||
Map<String, String> appendInfo = new HashMap<>();
|
||||
appendInfo.put("presetId", String.valueOf(u.getPresetId()));
|
||||
appendInfo.put("bonusCount", String.valueOf(u.getBonusCount()));
|
||||
appendInfo.put("lastUpdateDate", u.getLastUpdateDate().toString());
|
||||
appendInfo.put("isWatched", String.valueOf(u.isWatched()));
|
||||
retList.add(appendInfo);
|
||||
}
|
||||
resultMap.put("userLoginBonusList", retList);
|
||||
}
|
||||
|
||||
String json = mapper.write(resultMap);
|
||||
logger.info("Response: " + json);
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@@ -44,9 +45,24 @@ public class UpsertUserAllHandler implements BaseHandler {
|
||||
private final UserCourseService userCourseService;
|
||||
private final UserDuelService userDuelService;
|
||||
private final UserGeneralDataService userGeneralDataService;
|
||||
private final UserLoginBonusService userLoginBonusService;
|
||||
|
||||
@Autowired
|
||||
public UpsertUserAllHandler(StringMapper mapper, CardService cardService, UserDataService userDataService, UserCharacterService userCharacterService, UserGameOptionService userGameOptionService, UserMapAreaService userMapService, UserItemService userItemService, UserMusicDetailService userMusicDetailService, UserActivityService userActivityService, UserPlaylogService userPlaylogService, UserChargeService userChargeService, UserCourseService userCourseService, UserDuelService userDuelService, UserGeneralDataService userGeneralDataService) {
|
||||
public UpsertUserAllHandler(StringMapper mapper,
|
||||
CardService cardService,
|
||||
UserDataService userDataService,
|
||||
UserCharacterService userCharacterService,
|
||||
UserGameOptionService userGameOptionService,
|
||||
UserMapAreaService userMapService,
|
||||
UserItemService userItemService,
|
||||
UserMusicDetailService userMusicDetailService,
|
||||
UserActivityService userActivityService,
|
||||
UserPlaylogService userPlaylogService,
|
||||
UserChargeService userChargeService,
|
||||
UserCourseService userCourseService,
|
||||
UserDuelService userDuelService,
|
||||
UserGeneralDataService userGeneralDataService,
|
||||
UserLoginBonusService userLoginBonusService) {
|
||||
this.mapper = mapper;
|
||||
this.cardService = cardService;
|
||||
this.userDataService = userDataService;
|
||||
@@ -61,6 +77,7 @@ public class UpsertUserAllHandler implements BaseHandler {
|
||||
this.userCourseService = userCourseService;
|
||||
this.userDuelService = userDuelService;
|
||||
this.userGeneralDataService = userGeneralDataService;
|
||||
this.userLoginBonusService = userLoginBonusService;
|
||||
}
|
||||
|
||||
|
||||
@@ -304,6 +321,21 @@ public class UpsertUserAllHandler implements BaseHandler {
|
||||
userDuelService.saveAll(newUserDuelMap.values());
|
||||
}
|
||||
|
||||
if (upsertUserAll.getUserLoginBonusList() != null){
|
||||
List<Map<String, Object>> userLoginBonusList = upsertUserAll.getUserLoginBonusList();
|
||||
Map<Integer, UserLoginBonus> newUserLoginBonusMap = new HashMap<>();
|
||||
|
||||
userLoginBonusList.forEach(newUserLoginBonus -> {
|
||||
int loginBonusPresetId = Integer.parseInt((String) newUserLoginBonus.get("presetId"));
|
||||
Optional<UserLoginBonus> userLoginBonusOptional = userLoginBonusService.getUserLoginBonus(Integer.parseInt(userId), loginBonusPresetId);
|
||||
UserLoginBonus userLoginBonus = userLoginBonusOptional.orElseGet(UserLoginBonus::new);
|
||||
userLoginBonus.setLastUpdateDate(LocalDateTime.now());
|
||||
userLoginBonus.setWatched(true);
|
||||
newUserLoginBonusMap.put(loginBonusPresetId, userLoginBonus);
|
||||
});
|
||||
userLoginBonusService.saveAll(newUserLoginBonusMap.values());
|
||||
}
|
||||
|
||||
String json = mapper.write(new CodeResp(1));
|
||||
logger.info("Response: " + json);
|
||||
return json;
|
||||
|
||||
Reference in New Issue
Block a user