From c47d214052da95c398762e7634f56de58099a351 Mon Sep 17 00:00:00 2001 From: duhui Date: Tue, 10 Jan 2023 11:13:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BA=BF=E4=B8=8B=E5=A6=96?= =?UTF-8?q?=E7=B2=BE=E8=BF=94=E5=88=A9=E9=A2=9D=E5=BA=A6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/jbean/gm/GmMission.java | 6 + .../activityLogic/GmActivityLogic.java | 130 +++++++++++------- 2 files changed, 90 insertions(+), 46 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/jbean/gm/GmMission.java b/serverlogic/src/main/java/com/ljsd/jieling/jbean/gm/GmMission.java index 7388f6d48..e6cd30c79 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/jbean/gm/GmMission.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/jbean/gm/GmMission.java @@ -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; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/activityLogic/GmActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/activityLogic/GmActivityLogic.java index bee043b70..225e08825 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/activityLogic/GmActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/activityLogic/GmActivityLogic.java @@ -248,62 +248,91 @@ public class GmActivityLogic implements IEventHandler { * @param price */ private void getRewardToMonsterCurrencyBack(User user, GmActivity gmActivity, double price) throws Exception { - List gmMissionList = findAllGmMission(gmActivity.getId()); - if (gmMissionList == null || gmMissionList.isEmpty()) { + Map missionMap = findAllGmMissionMap(gmActivity.getId()); + if (missionMap == null || missionMap.isEmpty()) { LOGGER.error("妖晶返利活动,详细档位信息未配置,userid:{}, 活动id:{}", user.getId(), gmActivity.getId()); return; } // 档位排序 - List arbMissions = gmMissionList.stream().sorted(Comparator.comparing(ARBMission::getSort)).collect(Collectors.toList()); - gmActivity.addValue((int) price); - int totalNum = gmActivity.getValue(); - + List 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 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 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 findAllGmMissionMap(String activityId) { + HashMap map = new HashMap<>(); + List allGmMission = findAllGmMission(activityId); + for (ARBMission mission : allGmMission) { + map.put(mission.getId(),mission); + } + return map; + } + }