修改线下妖精返利额度逻辑
parent
f1e45eaa70
commit
c47d214052
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue