Commit 56855414 by lvyp

签到和红包拆分

1 parent 95b863fa
...@@ -38,7 +38,7 @@ public class UserController { ...@@ -38,7 +38,7 @@ public class UserController {
} }
@PostMapping("/saveUserSign") @PostMapping("/saveUserSign")
@ResponseBody @ResponseBody
public ApiResult saveUserSign(@RequestBody @Validated UserInfoParam param) { public ApiResult saveUserSign(@RequestBody UserInfoParam param) {
return userInfoService.saveUserSign(param); return userInfoService.saveUserSign(param);
} }
} }
...@@ -2,6 +2,7 @@ package com.polysoft.activity.mapper; ...@@ -2,6 +2,7 @@ package com.polysoft.activity.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.polysoft.activity.model.dto.CattleBrandDto; import com.polysoft.activity.model.dto.CattleBrandDto;
import com.polysoft.activity.model.vo.CattleBrandConfVO;
import com.polysoft.activity.model.vo.CattleBrandFroUserVO; import com.polysoft.activity.model.vo.CattleBrandFroUserVO;
import com.polysoft.activity.model.vo.CattleBrandVO; import com.polysoft.activity.model.vo.CattleBrandVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -11,6 +12,7 @@ import java.util.List; ...@@ -11,6 +12,7 @@ import java.util.List;
@Mapper @Mapper
public interface CattleBrandMapper extends BaseMapper<CattleBrandDto> { public interface CattleBrandMapper extends BaseMapper<CattleBrandDto> {
List<CattleBrandVO> queryCattleBrandList(); List<CattleBrandVO> queryCattleBrandList(@Param("brandType") String brandType);
CattleBrandFroUserVO queryCattleBrandByUserId(@Param("userId")Long userId); CattleBrandFroUserVO queryCattleBrandByUserId(@Param("userId")Long userId);
CattleBrandConfVO queryCattleBrandConf(@Param("signDate") String signDate);
} }
...@@ -22,4 +22,5 @@ public interface UserInfoMapper { ...@@ -22,4 +22,5 @@ public interface UserInfoMapper {
int saveUserSign(UserSignDto dto); int saveUserSign(UserSignDto dto);
int updateUserSign(UserSignDto dto); int updateUserSign(UserSignDto dto);
List<FirstLoginRedVO> queryFirstLoginRed(); List<FirstLoginRedVO> queryFirstLoginRed();
int updateFirstLoginRed(@Param("id") Long id);
} }
package com.polysoft.activity.model.vo;
import lombok.Data;
@Data
public class CattleBrandConfVO {
private Long id ;
private String signDate;
private double rate1;
private double rate2;
private double rate3;
private double rate4;
private double rate5;
}
...@@ -4,6 +4,6 @@ import com.polysoft.activity.utils.ApiResult; ...@@ -4,6 +4,6 @@ import com.polysoft.activity.utils.ApiResult;
public interface CattleBrandService { public interface CattleBrandService {
ApiResult queryCattleBrandList(); ApiResult queryCattleBrandList(String brandType);
ApiResult queryCattleBrandByUserId(Long userId); ApiResult queryCattleBrandByUserId(Long userId);
} }
...@@ -13,8 +13,8 @@ public class CattleBrandServiceImpl implements CattleBrandService { ...@@ -13,8 +13,8 @@ public class CattleBrandServiceImpl implements CattleBrandService {
private CattleBrandMapper cattleBrandMapper; private CattleBrandMapper cattleBrandMapper;
@Override @Override
public ApiResult queryCattleBrandList() { public ApiResult queryCattleBrandList(String brandType) {
return ApiResult.ok(cattleBrandMapper.queryCattleBrandList()); return ApiResult.ok(cattleBrandMapper.queryCattleBrandList(brandType));
} }
@Override @Override
......
...@@ -13,29 +13,20 @@ import com.polysoft.activity.model.dto.UserSignDto; ...@@ -13,29 +13,20 @@ import com.polysoft.activity.model.dto.UserSignDto;
import com.polysoft.activity.model.dto.WechatTokenDto; import com.polysoft.activity.model.dto.WechatTokenDto;
import com.polysoft.activity.model.param.ShareLinkParam; import com.polysoft.activity.model.param.ShareLinkParam;
import com.polysoft.activity.model.param.UserInfoParam; import com.polysoft.activity.model.param.UserInfoParam;
import com.polysoft.activity.model.vo.CattleBrandVO; import com.polysoft.activity.model.vo.*;
import com.polysoft.activity.model.vo.FirstLoginRedVO;
import com.polysoft.activity.model.vo.ShareLinkVO;
import com.polysoft.activity.model.vo.UserInfoVO;
import com.polysoft.activity.model.vo.WechatToken;
import com.polysoft.activity.service.UserInfoService; import com.polysoft.activity.service.UserInfoService;
import com.polysoft.activity.utils.ApiResult; import com.polysoft.activity.utils.ApiResult;
import com.polysoft.activity.utils.MathRandom;
import com.polysoft.activity.utils.SHA1; import com.polysoft.activity.utils.SHA1;
import com.polysoft.activity.utils.SnowFlakeUtil; import com.polysoft.activity.utils.SnowFlakeUtil;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.unit.DataUnit;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Random;
import java.util.UUID; import java.util.UUID;
...@@ -105,13 +96,15 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -105,13 +96,15 @@ public class UserInfoServiceImpl implements UserInfoService {
@Override @Override
public ApiResult saveUserSign(UserInfoParam param) { public ApiResult saveUserSign(UserInfoParam param) {
UserSignDto userSignDto = new UserSignDto(); UserSignDto userSignDto = new UserSignDto();
// CattleBrandConfVO confVO = cattleBrandMapper.queryCattleBrandConf(DateUtil.format(new Date(),"yyyy-MM-dd"));
CattleBrandConfVO confVO = cattleBrandMapper.queryCattleBrandConf("2021-02-11");
if(param.getSignId() != null){ if(param.getSignId() != null){
userSignDto.setId(param.getSignId()); userSignDto.setId(param.getSignId());
userSignDto.setCreateTime(new Date()); userSignDto.setCreateTime(new Date());
userSignDto.setSignStatus("2"); userSignDto.setSignStatus("2");
mapper.updateUserSign(userSignDto); mapper.updateUserSign(userSignDto);
}else { }else {
List<CattleBrandVO> cattleList = cattleBrandMapper.queryCattleBrandList(); MathRandom a = new MathRandom(confVO.getRate1(),confVO.getRate2(),confVO.getRate3(),confVO.getRate4(),confVO.getRate5());
userSignDto.setId(SnowFlakeUtil.nextId()); userSignDto.setId(SnowFlakeUtil.nextId());
userSignDto.setUserId(param.getUserId()); userSignDto.setUserId(param.getUserId());
userSignDto.setSignStatus("1"); userSignDto.setSignStatus("1");
...@@ -122,7 +115,7 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -122,7 +115,7 @@ public class UserInfoServiceImpl implements UserInfoService {
SaveUserCattleDto dto = new SaveUserCattleDto(); SaveUserCattleDto dto = new SaveUserCattleDto();
dto.setId(SnowFlakeUtil.nextId()); dto.setId(SnowFlakeUtil.nextId());
dto.setUserId(param.getUserId()); dto.setUserId(param.getUserId());
dto.setCattleBrandId(cattleList.get(new Random().nextInt(5)).getCattleId()); dto.setCattleBrandId(cattleBrandMapper.queryCattleBrandList((a.PercentageRandom()+"")).get(0).getCattleId());
mapper.saveCattleBrand(list); mapper.saveCattleBrand(list);
} }
return ApiResult.ok(); return ApiResult.ok();
...@@ -135,7 +128,7 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -135,7 +128,7 @@ public class UserInfoServiceImpl implements UserInfoService {
List<FirstLoginRedVO> firstLoginRedVOList = mapper.queryFirstLoginRed(); List<FirstLoginRedVO> firstLoginRedVOList = mapper.queryFirstLoginRed();
if(firstLoginRedVOList != null && firstLoginRedVOList.size() >0){ if(firstLoginRedVOList != null && firstLoginRedVOList.size() >0){
//新增到红包雨表 作为红包基础数据 //新增到红包雨表 作为红包基础数据
FirstLoginRedVO redVO = firstLoginRedVOList.get(new Random().nextInt(firstLoginRedVOList.size())); FirstLoginRedVO redVO = firstLoginRedVOList.get(0);
AddRedRainDto dto = new AddRedRainDto(); AddRedRainDto dto = new AddRedRainDto();
dto.setRedId(SnowFlakeUtil.nextId()); dto.setRedId(SnowFlakeUtil.nextId());
dto.setUserId(userId); dto.setUserId(userId);
...@@ -145,6 +138,7 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -145,6 +138,7 @@ public class UserInfoServiceImpl implements UserInfoService {
dto.setBatchNum(4); dto.setBatchNum(4);
dto.setCreateTime(new Date()); dto.setCreateTime(new Date());
activityMapper.saveRedRainForOne(dto); activityMapper.saveRedRainForOne(dto);
mapper.updateFirstLoginRed(redVO.getId());
//更新聚宝盆余额 //更新聚宝盆余额
List<UserInfoDto> userInfoDtoList = new ArrayList<>(); List<UserInfoDto> userInfoDtoList = new ArrayList<>();
UserInfoDto userInfoDto = new UserInfoDto(); UserInfoDto userInfoDto = new UserInfoDto();
......
...@@ -10,6 +10,7 @@ import com.polysoft.activity.model.vo.CattleBrandVO; ...@@ -10,6 +10,7 @@ import com.polysoft.activity.model.vo.CattleBrandVO;
import com.polysoft.activity.model.vo.RedAmountTotalVO; import com.polysoft.activity.model.vo.RedAmountTotalVO;
import com.polysoft.activity.model.vo.RedRainVO; import com.polysoft.activity.model.vo.RedRainVO;
import com.polysoft.activity.service.CattleBrandService; import com.polysoft.activity.service.CattleBrandService;
import com.polysoft.activity.utils.RedPacketUtil;
import com.polysoft.activity.utils.SnowFlakeUtil; import com.polysoft.activity.utils.SnowFlakeUtil;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
...@@ -42,7 +43,7 @@ public class InitRedPackageTask { ...@@ -42,7 +43,7 @@ public class InitRedPackageTask {
private UserInfoMapper userInfoMapper; private UserInfoMapper userInfoMapper;
// @Scheduled(initialDelay = 10000, fixedRate = 1*15*60*1000) // @Scheduled(initialDelay = 10000, fixedRate = 1*15*60*1000)
@Scheduled( cron = "20 42 23 * * ? ") @Scheduled( cron = "20 17 21 * * ? ")
public void execute() { public void execute() {
sendWechat(); sendWechat();
} }
...@@ -69,8 +70,8 @@ public class InitRedPackageTask { ...@@ -69,8 +70,8 @@ public class InitRedPackageTask {
// } // }
LoggerHelper.debug(this.getClass(),"任务开始"); LoggerHelper.debug(this.getClass(),"任务开始");
//查询出没有初始化的红包 //查询出没有初始化的红包
int batchNum = 1; final int batchNum = 1;
double totalMoney = 5000.00; final double totalMoney = 5000.00;
if(1==1){ if(1==1){
QueryRedRainDto dto1 = new QueryRedRainDto(); QueryRedRainDto dto1 = new QueryRedRainDto();
List<AddRedRainDto> batchList = new ArrayList<>(); List<AddRedRainDto> batchList = new ArrayList<>();
...@@ -79,12 +80,13 @@ public class InitRedPackageTask { ...@@ -79,12 +80,13 @@ public class InitRedPackageTask {
List<RedRainVO> list = activityMapper.queryRedRainList(dto1); List<RedRainVO> list = activityMapper.queryRedRainList(dto1);
//前10%红包 //前10%红包
int redNum = (int)(list.size()*0.1); int redNum = (int)(list.size()*0.1);
double [] redAmount = getMoney(5000.00*0.25,redNum); RedPacketUtil redpack = new RedPacketUtil();
List<Double> redAmount= redpack.getMoney(totalMoney*0.25,redNum,0.01,100,2.1);
HashSet<Integer> set = getLuckUser(redNum,list.size()); HashSet<Integer> set = getLuckUser(redNum,list.size());
int i = 0; int i = 0;
for (Integer s : set) { for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list.get(s),AddRedRainDto.class); AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list.get(s),AddRedRainDto.class);
addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount[i])); addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount.get(i)));
addRedRainDto.setRedType("1"); addRedRainDto.setRedType("1");
addRedRainDto.setIsEnble("1"); addRedRainDto.setIsEnble("1");
batchList.add(addRedRainDto); batchList.add(addRedRainDto);
...@@ -107,12 +109,13 @@ public class InitRedPackageTask { ...@@ -107,12 +109,13 @@ public class InitRedPackageTask {
//前20%红包 //前20%红包
int redNum = (int)(list.size()*0.2); int redNum = (int)(list.size()*0.2);
double [] redAmount = getMoney(5000.00*0.25,redNum); RedPacketUtil redpack = new RedPacketUtil();
List<Double> redAmount= redpack.getMoney(totalMoney*0.25,redNum,0.01,100,2.1);
HashSet<Integer> set = getLuckUser(redNum,list2.size()); HashSet<Integer> set = getLuckUser(redNum,list2.size());
int i = 0; int i = 0;
for (Integer s : set) { for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class); AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class);
addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount[i])); addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount.get(i)));
addRedRainDto.setRedType("1"); addRedRainDto.setRedType("1");
addRedRainDto.setIsEnble("1"); addRedRainDto.setIsEnble("1");
batchList2.add(addRedRainDto); batchList2.add(addRedRainDto);
...@@ -133,12 +136,13 @@ public class InitRedPackageTask { ...@@ -133,12 +136,13 @@ public class InitRedPackageTask {
List<RedRainVO> list2 = activityMapper.queryRedRainList(dto3_1); List<RedRainVO> list2 = activityMapper.queryRedRainList(dto3_1);
//前65%红包 //前65%红包
int redNum = (int)(list.size()*0.65); int redNum = (int)(list.size()*0.65);
double [] redAmount = getMoney(5000.00*0.5,redNum); RedPacketUtil redpack = new RedPacketUtil();
List<Double> redAmount= redpack.getMoney(totalMoney*0.5,redNum,0.01,100,2.1);
HashSet<Integer> set = getLuckUser(redNum,list2.size()); HashSet<Integer> set = getLuckUser(redNum,list2.size());
int i = 0; int i = 0;
for (Integer s : set) { for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class); AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class);
addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount[i])); addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount.get(i)));
addRedRainDto.setRedType("1"); addRedRainDto.setRedType("1");
addRedRainDto.setIsEnble("1"); addRedRainDto.setIsEnble("1");
batchList2.add(addRedRainDto); batchList2.add(addRedRainDto);
...@@ -160,7 +164,7 @@ public class InitRedPackageTask { ...@@ -160,7 +164,7 @@ public class InitRedPackageTask {
//前5%红包牛牌 //前5%红包牛牌
int redNum =list2.size(); int redNum =list2.size();
HashSet<Integer> set = getLuckUser(redNum,list2.size()); HashSet<Integer> set = getLuckUser(redNum,list2.size());
List<CattleBrandVO> cattleList = (List<CattleBrandVO>) cattleBrandService.queryCattleBrandList().get("data"); List<CattleBrandVO> cattleList = (List<CattleBrandVO>) cattleBrandService.queryCattleBrandList(null).get("data");
int i = 0; int i = 0;
for (Integer s : set) { for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class); AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class);
...@@ -216,40 +220,10 @@ public class InitRedPackageTask { ...@@ -216,40 +220,10 @@ public class InitRedPackageTask {
} }
return has; return has;
} }
private double [] getMoney(double money, int num){
Random r = new Random();
DecimalFormat format = new DecimalFormat(".##");
double middle = Double.parseDouble(format.format(money/num));
double [] dou = new double[num];
double redMoney = 0;
double nextMoney = money;
double sum = 0;
int index = 0;
for(int i=num;i>0;i--){
if(i == 1){
dou[index] = nextMoney;
}else{
while(true){
String str = format.format(r.nextDouble()*nextMoney);
redMoney = Double.parseDouble(str);
if(redMoney>0.01 && redMoney < middle ){
break;
}
}
nextMoney = Double.parseDouble(format.format(nextMoney - redMoney));
sum = sum + redMoney;
dou[index] = redMoney;
middle = Double.parseDouble(format.format(nextMoney/(i-1)));
index++;
}
}
return dou;
}
public static void main(String[] args) {
double [] ss = new InitRedPackageTask().getMoney(1000,15);
for (double s : ss) {
System.out.println(s);
} public static void main(String[] args) {
RedPacketUtil redpack = new RedPacketUtil();
List<Double> redAmount= redpack.getMoney(4000,227,5,100,2.1);
redAmount.forEach(item ->System.out.println(item));
} }
} }
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
parameterType="com.polysoft.activity.model.dto.CalculateAmoutDto"> parameterType="com.polysoft.activity.model.dto.CalculateAmoutDto">
SELECT SELECT
t.user_id, t.user_id,
max( t.red_amount ) AS redAmountTatol sum( t.red_amount ) AS redAmountTatol
FROM FROM
t_red_rain t where t.red_type=#{redType} and t.batch_num=#{batchNum} t_red_rain t where t.red_type=#{redType} and t.batch_num=#{batchNum}
......
...@@ -6,7 +6,11 @@ ...@@ -6,7 +6,11 @@
cattle_id, cattle_id,
brand_type, brand_type,
brand_name brand_name
from t_cattle_brand from t_cattle_brand where
1=1
<if test="brandType != null and brandType != '' ">
and brand_name#{brandType}
</if>
</select> </select>
<select id="queryCattleBrandByUserId" resultType="com.polysoft.activity.model.vo.CattleBrandFroUserVO"> <select id="queryCattleBrandByUserId" resultType="com.polysoft.activity.model.vo.CattleBrandFroUserVO">
SELECT SELECT
...@@ -19,6 +23,19 @@ ...@@ -19,6 +23,19 @@
FROM FROM
t_user_cattle t t_user_cattle t
WHERE WHERE
t.user_id =#{userId} GROUP BY t.user_id t.user_id =#{userId}
</select>
<select id="queryCattleBrandConf" resultType="com.polysoft.activity.model.vo.CattleBrandConfVO">
SELECT
cattle_id,
sign_date,
rate1,
rate2,
rate3,
rate4,
rate5
FROM
t_cattle_brand_conf where sign_date=#{signDate}
</select> </select>
</mapper> </mapper>
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
SELECT SELECT
id, id,
amount amount
from t_first_login_red where is_flag = '0' from t_first_login_red where is_flag = '0' order by id asc limit 1
</select> </select>
<update id="updateWechatToken" parameterType="com.polysoft.activity.model.dto.WechatTokenDto"> <update id="updateWechatToken" parameterType="com.polysoft.activity.model.dto.WechatTokenDto">
update wechat_token set access_token=#{accessToken},update_time=#{updateTime} where id =1 update wechat_token set access_token=#{accessToken},update_time=#{updateTime} where id =1
...@@ -39,6 +39,9 @@ ...@@ -39,6 +39,9 @@
</foreach> </foreach>
</where> </where>
</update> </update>
<update id="updateFirstLoginRed">
update t_first_login_red set is_flag = 1 where id =#{id}
</update>
<insert id="saveCattleBrand" parameterType="com.polysoft.activity.model.dto.SaveUserCattleDto"> <insert id="saveCattleBrand" parameterType="com.polysoft.activity.model.dto.SaveUserCattleDto">
INSERT into t_user_cattle ( INSERT into t_user_cattle (
id, id,
......
...@@ -41,38 +41,38 @@ public class MathRandom { ...@@ -41,38 +41,38 @@ public class MathRandom {
* @return int * @return int
* *
*/ */
private int PercentageRandom() public int PercentageRandom()
{ {
double randomNumber; double randomNumber;
randomNumber = Math.random(); randomNumber = Math.random();
if (randomNumber >= 0 && randomNumber <= rate0) if (randomNumber >= 0 && randomNumber <= rate0)
{ {
return 0; return 1;
} }
else if (randomNumber >= rate0 / 100 && randomNumber <= rate0 + rate1) else if (randomNumber >= rate0 / 100 && randomNumber <= rate0 + rate1)
{ {
return 1; return 2;
} }
else if (randomNumber >= rate0 + rate1 else if (randomNumber >= rate0 + rate1
&& randomNumber <= rate0 + rate1 + rate2) && randomNumber <= rate0 + rate1 + rate2)
{ {
return 2; return 3;
} }
else if (randomNumber >= rate0 + rate1 + rate2 else if (randomNumber >= rate0 + rate1 + rate2
&& randomNumber <= rate0 + rate1 + rate2 + rate3) && randomNumber <= rate0 + rate1 + rate2 + rate3)
{ {
return 3; return 4;
} }
else if (randomNumber >= rate0 + rate1 + rate2 + rate3 else if (randomNumber >= rate0 + rate1 + rate2 + rate3
&& randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4) && randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4)
{ {
return 4; return 5;
} }
else if (randomNumber >= rate0 + rate1 + rate2 + rate3 + rate4 else if (randomNumber >= rate0 + rate1 + rate2 + rate3 + rate4
&& randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4 && randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4
) )
{ {
return 5; return 6;
} }
return -1; return -1;
} }
...@@ -84,10 +84,10 @@ public class MathRandom { ...@@ -84,10 +84,10 @@ public class MathRandom {
public static void main(String[] agrs) public static void main(String[] agrs)
{ {
int i = 0; int i = 0;
MathRandom a = new MathRandom(0.50,0.30,0.15,0.04,0.01); MathRandom a = new MathRandom(0.01,0.3,0.15,0.04,0.5);
for (i = 0; i < 1; i++)//打印100个测试概率的准确性 for (i = 0; i < 100; i++)//打印100个测试概率的准确性
{ {
System.out.println(a.PercentageRandom()+1); System.out.println(a.PercentageRandom());
} }
} }
......
package com.polysoft.activity.constant; package com.polysoft.activity.utils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -11,15 +11,15 @@ import java.util.List; ...@@ -11,15 +11,15 @@ import java.util.List;
*/ */
public class RedPacketUtil { public class RedPacketUtil {
//1.设置金额的上下限 最少0.01,最多200 //1.设置金额的上下限 最少0.01,最多200
private double MINMONEY ; // private double MINMONEY ;
private double MAXMONEY ; // private double MAXMONEY ;
private double TIMES ; // private double TIMES ;
/** /**
* 4.实现红包分配,为了避免一个红包占用大量的金额,设定非最后一个红包的 最大金额,可以设置平均值的N陪, * 4.实现红包分配,为了避免一个红包占用大量的金额,设定非最后一个红包的 最大金额,可以设置平均值的N陪,
* *
* */ * */
public List<Double> splitRedPackets(double money, int count) { public List<Double> splitRedPackets(double money, int count,double MINMONEY,double MAXMONEY,double TIMES ) {
if (!isRight(money, count)) { if (!isRight(money, count,MINMONEY,MAXMONEY)) {
return null; return null;
} }
List<Double> list = new ArrayList<Double>(); List<Double> list = new ArrayList<Double>();
...@@ -27,7 +27,7 @@ public class RedPacketUtil { ...@@ -27,7 +27,7 @@ public class RedPacketUtil {
max = max > MAXMONEY ? MAXMONEY : max; max = max > MAXMONEY ? MAXMONEY : max;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
double one = randomRedPacket(money, MINMONEY, max, count - i); double one = randomRedPacket(money, MINMONEY, max, count - i,MINMONEY,MAXMONEY);
list.add(one); list.add(one);
money -= one; money -= one;
} }
...@@ -37,7 +37,7 @@ public class RedPacketUtil { ...@@ -37,7 +37,7 @@ public class RedPacketUtil {
* 3.随机产生红包 * 3.随机产生红包
* *
* */ * */
private double randomRedPacket(double money, double mins, double maxs, int count) { private double randomRedPacket(double money, double mins, double maxs, int count,double MINMONEY,double MAXMONEY) {
if (count == 1) { if (count == 1) {
return (double) (Math.round(money * 100)) / 100; return (double) (Math.round(money * 100)) / 100;
} }
...@@ -48,28 +48,23 @@ public class RedPacketUtil { ...@@ -48,28 +48,23 @@ public class RedPacketUtil {
double one = ((double) Math.random() * (max - mins) + mins); double one = ((double) Math.random() * (max - mins) + mins);
one = (double) (Math.round(one * 100)) / 100; one = (double) (Math.round(one * 100)) / 100;
double moneyOther = money - one; double moneyOther = money - one;
if (isRight(moneyOther, count - 1)) { if (isRight(moneyOther, count - 1,MINMONEY,MAXMONEY)) {
return one; return one;
} else { } else {
double avg = moneyOther / (count - 1); double avg = moneyOther / (count - 1);
if (avg < MINMONEY) { if (avg < MINMONEY) {
return randomRedPacket(money, mins, one, count); return randomRedPacket(money, mins, one, count,MINMONEY,MAXMONEY);
} else if (avg > MAXMONEY) { } else if (avg > MAXMONEY) {
return randomRedPacket(money, one, maxs, count); return randomRedPacket(money, one, maxs, count,MINMONEY,MAXMONEY);
} }
} }
return one; return one;
} }
public RedPacketUtil(double MINMONEY, double MAXMONEY, double TIMES) {
this.MINMONEY = MINMONEY;
this.MAXMONEY = MAXMONEY;
this.TIMES = TIMES;
}
//2.判断金额是否合法 如果超过了最大值与最小值,错误 //2.判断金额是否合法 如果超过了最大值与最小值,错误
private boolean isRight(double money, int count) { private boolean isRight(double money, int count,double MINMONEY,double MAXMONEY) {
double avg = money / count; double avg = money / count;
if (avg < MINMONEY) { if (avg < MINMONEY) {
return false; return false;
...@@ -79,10 +74,8 @@ public class RedPacketUtil { ...@@ -79,10 +74,8 @@ public class RedPacketUtil {
return true; return true;
} }
public static void main(String[] args) { public List<Double> getMoney(double money,int count ,double MINMONEY,double MAXMONEY ,double TIMES) {
RedPacketUtil util = new RedPacketUtil(5,100,2); return splitRedPackets(money,count,MINMONEY, MAXMONEY,TIMES);
List<Double> doubles = util.splitRedPackets(1250, 100);
doubles.forEach(item -> System.out.println(item));
} }
} }
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!