package cn.com.yitong.ares.icbs.common.util;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.dubbo.remoting.exchange.Response;
/**
* 根据上下限额生成随机红包
*
* @param context
* @param money
* 总金额
* @param count
* 数量
* @param maxmoney
* 红包最大金额
* @param maxmoney
* 红包最小金额 上下文 author wy
* @return list
*/
public class RedPacketUtils {
private static boolean isRight(double money, int count, double maxmoney, double minmoney) {
double avg = money / count;
if (avg < minmoney) {
return false;
} else if (avg > maxmoney) {
return false;
}
return true;
}
/**
* @param money
* @param mins
* @param maxs
* @param count
* @param maxmoney
* @param minmoney
* @return
*/
private static double randomRedPacket(double money, double mins, double maxs, int count, double maxmoney,
double minmoney) {
if (count == 1) {
return (double) (Math.round(money * 100)) / 100;
}
if (mins == maxs) {
return mins;// 如果最大值和最小值一样,就返回mins
}
double max = maxs > money ? money : maxs;
double one = ((double) Math.random() * (max - mins) + mins);
one = (double) (Math.round(one * 100)) / 100;
double moneyOther = money - one;
if (isRight(moneyOther, count - 1, maxmoney, minmoney)) {
return one;
} else {
// 重新分配
double avg = moneyOther / (count - 1);
if (avg < minmoney) {
return randomRedPacket(money, mins, one, count, maxmoney, minmoney);
} else if (avg > maxmoney) {
return randomRedPacket(money, one, maxs, count, maxmoney, minmoney);
}
}
return one;
}
private static final double TIMES = 2.1f;
public static List<Double> splitRedPackets(double money, int count, double maxmoney, double minmoney) {
if (!isRight(money, count, maxmoney, minmoney)) {
return null;
}
List<Double> list = new ArrayList<Double>();
double max = (float) (money * TIMES / count);
max = max > maxmoney ? maxmoney : max;
for (int i = 0; i < count; i++) {
double one = randomRedPacket(money, minmoney, max, count - i, maxmoney, minmoney);
list.add(one);
money -= one;
}
return list;
}
}