修改线下妖精返利额度逻辑
parent
f1e45eaa70
commit
c47d214052
|
@ -19,6 +19,12 @@ public class GmMission extends MongoBase {
|
|||
this.setRootCollection(User._COLLECTION_NAME);
|
||||
}
|
||||
|
||||
public GmMission(String id) {
|
||||
this.id = id;
|
||||
//绑定关系
|
||||
this.setRootCollection(User._COLLECTION_NAME);
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
|
|
@ -248,62 +248,91 @@ public class GmActivityLogic implements IEventHandler {
|
|||
* @param price
|
||||
*/
|
||||
private void getRewardToMonsterCurrencyBack(User user, GmActivity gmActivity, double price) throws Exception {
|
||||
List<ARBMission> gmMissionList = findAllGmMission(gmActivity.getId());
|
||||
if (gmMissionList == null || gmMissionList.isEmpty()) {
|
||||
Map<String, ARBMission> missionMap = findAllGmMissionMap(gmActivity.getId());
|
||||
if (missionMap == null || missionMap.isEmpty()) {
|
||||
LOGGER.error("妖晶返利活动,详细档位信息未配置,userid:{}, 活动id:{}", user.getId(), gmActivity.getId());
|
||||
return;
|
||||
}
|
||||
// 档位排序
|
||||
List<ARBMission> arbMissions = gmMissionList.stream().sorted(Comparator.comparing(ARBMission::getSort)).collect(Collectors.toList());
|
||||
gmActivity.addValue((int) price);
|
||||
int totalNum = gmActivity.getValue();
|
||||
|
||||
List<ARBMission> arbMissions = missionMap.values().stream().sorted(Comparator.comparing(ARBMission::getSort)).collect(Collectors.toList());
|
||||
// 本次金额
|
||||
int timeMoney = (int) price;
|
||||
// 赋值
|
||||
gmActivity.addValue(timeMoney);
|
||||
// 总金额
|
||||
int sumMoney = gmActivity.getValue();
|
||||
// 最低要求
|
||||
int limit = arbMissions.get(0).getBeforeNum();
|
||||
if (totalNum < limit || totalNum <= 0) {
|
||||
LOGGER.error("妖晶返利活动,充值金额不足最低领取调解,userid:{},活动id:{},当前累充金额:{},最低条件:{}", user.getId(), gmActivity.getId(), totalNum, limit);
|
||||
if (sumMoney < limit || sumMoney <= 0) {
|
||||
LOGGER.error("妖晶返利活动,充值金额不足最低领取调解,userid:{},活动id:{},当前累充金额:{},最低条件:{}", user.getId(), gmActivity.getId(), sumMoney, limit);
|
||||
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++) {
|
||||
ARBMission arbMission = arbMissions.get(i);
|
||||
// 能被领取的数目
|
||||
int availableNum = arbMission.getAfterNum() - arbMission.getBeforeNum();
|
||||
if (i == 0){
|
||||
availableNum += arbMission.getBeforeNum();
|
||||
}
|
||||
// 已领取
|
||||
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){
|
||||
String markId = null;
|
||||
for (ARBMission arbMission : arbMissions) {
|
||||
if (sumMoney >= arbMission.getBeforeNum() && sumMoney <= arbMission.getAfterNum()){
|
||||
long rewardNum = (long) (timeMoney * 10000L * (arbMission.getBackRatio() / 100d));
|
||||
monsterCurrencyBackSendReward(user.getId(),rewardNum,arbMission,gmActivity,timeMoney);
|
||||
markId = arbMission.getId();
|
||||
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;
|
||||
}
|
||||
// 单日累充和妖晶返利每日清零
|
||||
if (gmActivity.getType() == 1 || gmActivity.getType() == 2){
|
||||
if (gmActivity.getType() == 1 || gmActivity.getType() == 2 || gmActivity.getType() == 4){
|
||||
gmActivity.setValue(0);
|
||||
gmActivity.setMissionMap(new HashMap<>());
|
||||
}
|
||||
|
@ -349,4 +378,13 @@ public class GmActivityLogic implements IEventHandler {
|
|||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue