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<String, LinkedList<String>> getMemberOnHook(Double hours, BigDecimal hangingRevenue,List<Map<String,String>> plan) {
|
Map objectObjectHashMap = new HashMap<String, List<String>>();
|
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<String,String> 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<String,String> 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<String, LinkedList<String>> getMemberOnHook(Double hours, BigDecimal hangingRevenue,List<Map<String,String>> plan) {
|
Map objectObjectHashMap = new HashMap<String, LinkedList<String>>();
|
LinkedList linkedList = new LinkedList<>();
|
for(int i = 1;i <= plan.size();i++){
|
String planKey = Integer.toString(i);
|
for(Map<String,String> 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;
|
}
|
}
|
|
}
|