修改线下妖精返利额度逻辑

back_recharge
duhui 2023-01-10 11:13:51 +08:00
parent f1e45eaa70
commit c47d214052
2 changed files with 90 additions and 46 deletions

View File

@ -19,6 +19,12 @@ public class GmMission extends MongoBase {
this.setRootCollection(User._COLLECTION_NAME); this.setRootCollection(User._COLLECTION_NAME);
} }
public GmMission(String id) {
this.id = id;
//绑定关系
this.setRootCollection(User._COLLECTION_NAME);
}
public String getId() { public String getId() {
return id; return id;
} }

View File

@ -248,62 +248,91 @@ public class GmActivityLogic implements IEventHandler {
* @param price * @param price
*/ */
private void getRewardToMonsterCurrencyBack(User user, GmActivity gmActivity, double price) throws Exception { private void getRewardToMonsterCurrencyBack(User user, GmActivity gmActivity, double price) throws Exception {
List<ARBMission> gmMissionList = findAllGmMission(gmActivity.getId()); Map<String, ARBMission> missionMap = findAllGmMissionMap(gmActivity.getId());
if (gmMissionList == null || gmMissionList.isEmpty()) { if (missionMap == null || missionMap.isEmpty()) {
LOGGER.error("妖晶返利活动详细档位信息未配置userid{}, 活动id{}", user.getId(), gmActivity.getId()); LOGGER.error("妖晶返利活动详细档位信息未配置userid{}, 活动id{}", user.getId(), gmActivity.getId());
return; return;
} }
// 档位排序 // 档位排序
List<ARBMission> arbMissions = gmMissionList.stream().sorted(Comparator.comparing(ARBMission::getSort)).collect(Collectors.toList()); List<ARBMission> arbMissions = missionMap.values().stream().sorted(Comparator.comparing(ARBMission::getSort)).collect(Collectors.toList());
gmActivity.addValue((int) price); // 本次金额
int totalNum = gmActivity.getValue(); int timeMoney = (int) price;
// 赋值
gmActivity.addValue(timeMoney);
// 总金额
int sumMoney = gmActivity.getValue();
// 最低要求
int limit = arbMissions.get(0).getBeforeNum(); int limit = arbMissions.get(0).getBeforeNum();
if (totalNum < limit || totalNum <= 0) { if (sumMoney < limit || sumMoney <= 0) {
LOGGER.error("妖晶返利活动充值金额不足最低领取调解userid{},活动id{},当前累充金额:{},最低条件:{}", user.getId(), gmActivity.getId(), totalNum, limit); LOGGER.error("妖晶返利活动充值金额不足最低领取调解userid{},活动id{},当前累充金额:{},最低条件:{}", user.getId(), gmActivity.getId(), sumMoney, limit);
return; return;
} }
// 首次计算标记
String mark = "firstMark";
GmMission markMission = gmActivity.getMissionMap().get(mark);
if (markMission == null){
gmActivity.getMissionMap().put(mark,new GmMission());
timeMoney = sumMoney;
}
for (int i = 0; i < arbMissions.size(); i++) { String markId = null;
ARBMission arbMission = arbMissions.get(i); for (ARBMission arbMission : arbMissions) {
// 能被领取的数目 if (sumMoney >= arbMission.getBeforeNum() && sumMoney <= arbMission.getAfterNum()){
int availableNum = arbMission.getAfterNum() - arbMission.getBeforeNum(); long rewardNum = (long) (timeMoney * 10000L * (arbMission.getBackRatio() / 100d));
if (i == 0){ monsterCurrencyBackSendReward(user.getId(),rewardNum,arbMission,gmActivity,timeMoney);
availableNum += arbMission.getBeforeNum(); markId = arbMission.getId();
}
// 已领取
GmMission mission = gmActivity.getMissionMap().getOrDefault(arbMission.getId(), new GmMission());
if (mission.getState() == 1) {
totalNum -= availableNum;
continue;
}
// 返利数量
int minNum = Math.min(totalNum, availableNum);
minNum -= mission.getValue();
long rewardNum = (long) (minNum * 10000L * (arbMission.getBackRatio() / 100d));
// 邮件奖励
ArrayList<long[][]> reward = new ArrayList<>();
reward.add(new long[][]{{16, rewardNum}});
String mailReward = ItemUtil.getMailRewardLong(reward);
if (!StringUtil.isEmpty(mailReward)) {
MailLogic.getInstance().sendMail(user.getId(), arbMission.getActivity().getName(), arbMission.getTitle(), mailReward, TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
}
// 档位更新
mission.setId(arbMission.getId());
mission.addValue(minNum);
if (mission.getValue() == availableNum){
totalNum -= availableNum;
mission.setState(1);
}
gmActivity.putMissionMap(mission.getId(),mission);
// 本档位未满,不需要继续循环了
if (mission.getState() != 1){
break; break;
} }
} }
String beforeMarkId = null;
for (ARBMission arbMission : arbMissions) {
String missionId = arbMission.getId();
GmMission mission = gmActivity.getMissionMap().getOrDefault(missionId, new GmMission(missionId));
if (mission.getValue() > 0 && !missionId.equals(markId)){
beforeMarkId = missionId;
break;
}
}
if (beforeMarkId == null){
return;
}
ARBMission nowMission = missionMap.get(markId);
ARBMission beforeMission = missionMap.get(beforeMarkId);
GmMission beforeMsn = gmActivity.getMissionMap().get(beforeMission.getId());
long beforeNum = (long) (beforeMsn.getValue() * 10000L * (beforeMission.getBackRatio() / 100d));
long nowNum = (long) (beforeMsn.getValue() * 10000L * (nowMission.getBackRatio() / 100d));
long rewardNum = nowNum - beforeNum;
monsterCurrencyBackSendReward(user.getId(),rewardNum,nowMission,gmActivity,beforeMsn.getValue());
beforeMsn.setValue(0);
gmActivity.putMissionMap(beforeMsn.getId(),beforeMsn);
}
/**
*
* @param uid
* @param arbMission
* @param gmActivity
* @throws Exception
*/
private void monsterCurrencyBackSendReward(int uid, long rewardNum, ARBMission arbMission, GmActivity gmActivity, int addValue) throws Exception {
// 邮件奖励
ArrayList<long[][]> reward = new ArrayList<>();
reward.add(new long[][]{{16, rewardNum}});
String mailReward = ItemUtil.getMailRewardLong(reward);
if (!StringUtil.isEmpty(mailReward)) {
MailLogic.getInstance().sendMail(uid, arbMission.getActivity().getName(), arbMission.getTitle(), mailReward, TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
}
// 更新数据
String missionId = arbMission.getId();
GmMission mission = gmActivity.getMissionMap().getOrDefault(missionId, new GmMission(missionId));
mission.addValue(addValue);
gmActivity.putMissionMap(missionId,mission);
} }
/** /**
@ -321,7 +350,7 @@ public class GmActivityLogic implements IEventHandler {
continue; continue;
} }
// 单日累充和妖晶返利每日清零 // 单日累充和妖晶返利每日清零
if (gmActivity.getType() == 1 || gmActivity.getType() == 2){ if (gmActivity.getType() == 1 || gmActivity.getType() == 2 || gmActivity.getType() == 4){
gmActivity.setValue(0); gmActivity.setValue(0);
gmActivity.setMissionMap(new HashMap<>()); gmActivity.setMissionMap(new HashMap<>());
} }
@ -349,4 +378,13 @@ public class GmActivityLogic implements IEventHandler {
return coreMonoTemplate.find(query, ARBMission.class); return coreMonoTemplate.find(query, ARBMission.class);
} }
public Map<String, ARBMission> findAllGmMissionMap(String activityId) {
HashMap<String, ARBMission> map = new HashMap<>();
List<ARBMission> allGmMission = findAllGmMission(activityId);
for (ARBMission mission : allGmMission) {
map.put(mission.getId(),mission);
}
return map;
}
} }