package cc.mrbird.febs.dapp.enumerate; import cc.mrbird.febs.common.contants.AppContants; import cc.mrbird.febs.dapp.service.MemberOnHookPlan; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import java.math.BigDecimal; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; public enum MemberOnHookPlanEnum implements MemberOnHookPlan { //会员游客等身份 LEVEL_MB{ @Override public Map> getMemberOnHook(Double hours, BigDecimal hangingRevenue,List> plan) { Map objectObjectHashMap = new HashMap>(); LinkedList linkedList = new LinkedList<>(); //最小挂机金额 //最大挂机次数,五分钟开奖一次,一个小时固定次数12次 int maxTimes = new Double(hours * 12).intValue(); //预期最大收益 BigDecimal profitTotal = AppContants.ONHOOK_BASIC_AMOUNT.multiply(hangingRevenue).setScale(4, BigDecimal.ROUND_DOWN); BigDecimal profitTotalNow = BigDecimal.ZERO; for(int i=1;i<=maxTimes;){ //当实际的收益小于预期的收益时,按照随机,否则只中奖第一方案 int randomInt = 1; if(profitTotalNow.compareTo(profitTotal)>0){ randomInt = RandomUtil.randomInt(1, 3); } if(1 == randomInt){ String planKey = Integer.toString(randomInt); for(Map planMap : plan){ if(ObjectUtil.isNotEmpty(planMap.get(planKey))){ String planMapValue = planMap.get(planKey); JSONObject jsonObject = JSONUtil.parseObj(planMapValue); jsonObject.set("isGoal","2"); BigDecimal amount = new BigDecimal(jsonObject.get("amount").toString()); BigDecimal profit = amount.multiply(hangingRevenue).setScale(4, BigDecimal.ROUND_DOWN); profitTotalNow = profitTotalNow.add(profit).setScale(4, BigDecimal.ROUND_DOWN); jsonObject.set("profit",profit); linkedList.add(JSONUtil.toJsonStr(jsonObject)); maxTimes --; } } }else{ for(int j = 1;j<=randomInt;j++){ String planKey = Integer.toString(j); for(Map planMap : plan){ if(ObjectUtil.isNotEmpty(planMap.get(planKey))){ String planMapValue = planMap.get(planKey); JSONObject jsonObject = JSONUtil.parseObj(planMapValue); if(j == randomInt){ jsonObject.set("isGoal","2"); }else{ jsonObject.set("isGoal","1"); } BigDecimal amount = new BigDecimal(jsonObject.get("amount").toString()); BigDecimal profit = amount.multiply(hangingRevenue).setScale(4, BigDecimal.ROUND_DOWN); if(j != randomInt){ profitTotalNow = profitTotalNow.add(profit).subtract(amount).setScale(4, BigDecimal.ROUND_DOWN); }else{ profitTotalNow = profitTotalNow.add(profit).setScale(4, BigDecimal.ROUND_DOWN); } jsonObject.set("profit",profit); linkedList.add(JSONUtil.toJsonStr(jsonObject)); maxTimes --; } } } } } objectObjectHashMap.put("LEVEL_MB",linkedList); return objectObjectHashMap; } }, //系统设置亏损时,不管用户的身份等级 IS_PROFIT_NO{ @Override public Map> getMemberOnHook(Double hours, BigDecimal hangingRevenue,List> plan) { Map objectObjectHashMap = new HashMap>(); LinkedList linkedList = new LinkedList<>(); for(int i = 1;i <= plan.size();i++){ String planKey = Integer.toString(i); for(Map planMap : plan){ if(ObjectUtil.isNotEmpty(planMap.get(planKey))){ String planMapValue = planMap.get(planKey); JSONObject jsonObject = JSONUtil.parseObj(planMapValue); jsonObject.set("isGoal","1"); BigDecimal amount = new BigDecimal(jsonObject.get("amount").toString()); BigDecimal profit = amount.multiply(hangingRevenue).setScale(4, BigDecimal.ROUND_DOWN); jsonObject.set("profit",profit); linkedList.add(JSONUtil.toJsonStr(jsonObject)); } } } objectObjectHashMap.put("IS_PROFIT_NO",linkedList); return objectObjectHashMap; } } }