Commit 6b005320 by xunj

概率随机、用户牛牌数量查询

1 parent a249f4c4
package com.polysoft.activity.constant;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
/**
* @author lvyp
* @date 2021/1/29
*/
public class Test {
public static void main(String[] args) {
//红包数
int number = 10;
//红包总额
float total = 100;
float money;
//最小红包
double min = 1;
double max;
int i = 1;
List math = new ArrayList();
DecimalFormat df = new DecimalFormat("###.##");
while (i < number) {
//保证即使一个红包是最大的了,后面剩下的红包,每个红包也不会小于最小值
max = total - min * (number - i);
int k = (int)(number - i) / 2;
//保证最后两个人拿的红包不超出剩余红包
if (number - i <= 2) {
k = number - i;
}
//最大的红包限定的平均线上下
max = max / k;
//保证每个红包大于最小值,又不会大于最大值
money = (int) (min * 100 + Math.random() * (max * 100 - min * 100 + 1));
money = (float)money / 100;
//保留两位小数
money = Float.parseFloat(df.format(money));
total=(int)(total*100 - money*100);
total = total/100;
math.add(money);
System.out.println("第" + i + "个人拿到" + money + "剩下" + total);
i++;
//最后一个人拿走剩下的红包
if (i == number) {
math.add(total);
System.out.println("第" + i + "个人拿到" + total + "剩下0");
}
}
//取数组中最大的一个值的索引
System.out.println("本轮发红包中第" + (math.indexOf(Collections.max(math)) + 1) + "个人手气最佳");
}
}
...@@ -24,11 +24,21 @@ public class UserController { ...@@ -24,11 +24,21 @@ public class UserController {
return userInfoService.queryAuthUser(param.getPhone()); return userInfoService.queryAuthUser(param.getPhone());
} }
@PostMapping("/getFirsetLgoinRed" )
@ResponseBody
public ApiResult getFirsetLgoinRed(@RequestBody @Validated UserInfoParam param) {
return userInfoService.getFirsetLgoinRed(param.getUserId());
}
@PostMapping("/getShareLink" ) @PostMapping("/getShareLink" )
@ResponseBody @ResponseBody
public ApiResult getShareLink(@RequestBody @Validated ShareLinkParam param) { public ApiResult getShareLink(@RequestBody @Validated ShareLinkParam param) {
return userInfoService.getShareLink(param); return userInfoService.getShareLink(param);
} }
@PostMapping("/saveUserSign")
@ResponseBody
public ApiResult saveUserSign(@RequestBody @Validated UserInfoParam param) {
return userInfoService.saveUserSign(param);
}
} }
...@@ -23,6 +23,7 @@ public interface ActivityMapper extends BaseMapper<ActItemDto> { ...@@ -23,6 +23,7 @@ public interface ActivityMapper extends BaseMapper<ActItemDto> {
List<ActItemVO> queryActivityInfo(); List<ActItemVO> queryActivityInfo();
int updateActStatus(@Param("id")Long id ,@Param("status") String status); int updateActStatus(@Param("id")Long id ,@Param("status") String status);
int saveRedRain(@Param("list") List<AddRedRainDto> list); int saveRedRain(@Param("list") List<AddRedRainDto> list);
int saveRedRainForOne(AddRedRainDto dto);
List<RedRainVO> queryRedRainList(QueryRedRainDto dto); List<RedRainVO> queryRedRainList(QueryRedRainDto dto);
int updateRedPackage(List<AddRedRainDto> dto); int updateRedPackage(List<AddRedRainDto> dto);
int updateRedPackageForCattle(List<AddRedRainDto> dto); int updateRedPackageForCattle(List<AddRedRainDto> dto);
......
...@@ -2,7 +2,9 @@ package com.polysoft.activity.mapper; ...@@ -2,7 +2,9 @@ package com.polysoft.activity.mapper;
import com.polysoft.activity.model.dto.SaveUserCattleDto; import com.polysoft.activity.model.dto.SaveUserCattleDto;
import com.polysoft.activity.model.dto.UserInfoDto; import com.polysoft.activity.model.dto.UserInfoDto;
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.vo.FirstLoginRedVO;
import com.polysoft.activity.model.vo.UserInfoVO; import com.polysoft.activity.model.vo.UserInfoVO;
import com.polysoft.activity.model.vo.WechatToken; import com.polysoft.activity.model.vo.WechatToken;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
...@@ -17,4 +19,7 @@ public interface UserInfoMapper { ...@@ -17,4 +19,7 @@ public interface UserInfoMapper {
int updateWechatToken(WechatTokenDto dto); int updateWechatToken(WechatTokenDto dto);
int updateRedBalace(@Param("list") List<UserInfoDto> list); int updateRedBalace(@Param("list") List<UserInfoDto> list);
int saveCattleBrand(@Param("list") List<SaveUserCattleDto> list); int saveCattleBrand(@Param("list") List<SaveUserCattleDto> list);
int saveUserSign(UserSignDto dto);
int updateUserSign(UserSignDto dto);
List<FirstLoginRedVO> queryFirstLoginRed();
} }
package com.polysoft.activity.model.dto;
import cn.hutool.core.date.DateUtil;
import lombok.Data;
import java.util.Date;
/**
* @author lvyp
* @date 2021/1/29
*/
@Data
public class UserSignDto {
private Long id;
private Long userId;
private String signDate;
private String signStatus;
private String createTime;
public void setSignDate(Date signDate) {
this.signDate = DateUtil.format(signDate,"yyyy-MM-dd");
}
public void setCreateTime(Date createTime) {
this.createTime = DateUtil.format(createTime,"yyyy-MM-dd HH:mm:ss");
}
}
...@@ -15,4 +15,6 @@ public class UserInfoParam extends PageQuery { ...@@ -15,4 +15,6 @@ public class UserInfoParam extends PageQuery {
@ApiModelProperty("手机号") @ApiModelProperty("手机号")
@NotBlank(message = "手机号不能为空") @NotBlank(message = "手机号不能为空")
private String phone; private String phone;
private Long userId;
private Long signId;
} }
package com.polysoft.activity.model.vo; package com.polysoft.activity.model.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
/** /**
...@@ -14,4 +13,6 @@ public class ActItemVO { ...@@ -14,4 +13,6 @@ public class ActItemVO {
private String startTime; private String startTime;
private String emdTime; private String emdTime;
private String activityStatus; private String activityStatus;
//活动剩余时间 单位秒
private Long surplusSecond=30L;
} }
package com.polysoft.activity.model.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author lvyp
* @date 2021/1/29
*/
@Data
public class FirstLoginRedVO {
private Long id;
private BigDecimal amount;
}
...@@ -21,4 +21,6 @@ public class UserInfoVO implements Serializable { ...@@ -21,4 +21,6 @@ public class UserInfoVO implements Serializable {
private BigDecimal redBalance; private BigDecimal redBalance;
@ApiModelProperty("部门名称") @ApiModelProperty("部门名称")
private String dept_name; private String dept_name;
@ApiModelProperty("是否首次进入 0 是 1 不是")
private String isFirst;
} }
...@@ -2,9 +2,12 @@ package com.polysoft.activity.service; ...@@ -2,9 +2,12 @@ package com.polysoft.activity.service;
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.utils.ApiResult; import com.polysoft.activity.utils.ApiResult;
public interface UserInfoService { public interface UserInfoService {
ApiResult queryAuthUser(String phone); ApiResult queryAuthUser(String phone);
ApiResult getShareLink(ShareLinkParam param); ApiResult getShareLink(ShareLinkParam param);
ApiResult saveUserSign(UserInfoParam param);
ApiResult getFirsetLgoinRed(Long userId);
} }
...@@ -13,7 +13,9 @@ import org.springframework.stereotype.Service; ...@@ -13,7 +13,9 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author lvyp * @author lvyp
...@@ -35,20 +37,26 @@ public class ActItemServiceImpl implements ActItemService{ ...@@ -35,20 +37,26 @@ public class ActItemServiceImpl implements ActItemService{
//正在进行 //正在进行
activityMapper.updateActStatus(item.getId(), "1"); activityMapper.updateActStatus(item.getId(), "1");
item.setActivityStatus("1"); item.setActivityStatus("1");
item.setSurplusSecond(endTime-cuttentTime);
} }
if(cuttentTime < startTime && (startTime - cuttentTime) <30){ if(cuttentTime < startTime && (startTime - cuttentTime) <30){
//即将开始 //即将开始
activityMapper.updateActStatus(item.getId(), "2"); activityMapper.updateActStatus(item.getId(), "2");
item.setActivityStatus("2"); item.setActivityStatus("2");
item.setSurplusSecond(endTime-endTime);
} }
if (cuttentTime > endTime) { if (cuttentTime > endTime) {
//已结束 //已结束
activityMapper.updateActStatus(item.getId(), "3"); activityMapper.updateActStatus(item.getId(), "3");
item.setActivityStatus("3"); item.setActivityStatus("3");
item.setSurplusSecond(endTime-endTime);
} }
} }
} }
return ApiResult.ok(list); Map<String,Object> map = new HashMap<>();
map.put("list",list);
map.put("currentTime",DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
return ApiResult.ok(map);
} }
@Override @Override
......
...@@ -3,23 +3,39 @@ package com.polysoft.activity.service.impl; ...@@ -3,23 +3,39 @@ package com.polysoft.activity.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.polysoft.activity.common.log.LoggerHelper; import com.polysoft.activity.common.log.LoggerHelper;
import com.polysoft.activity.mapper.ActivityMapper;
import com.polysoft.activity.mapper.CattleBrandMapper;
import com.polysoft.activity.mapper.UserInfoMapper; import com.polysoft.activity.mapper.UserInfoMapper;
import com.polysoft.activity.model.dto.AddRedRainDto;
import com.polysoft.activity.model.dto.SaveUserCattleDto;
import com.polysoft.activity.model.dto.UserInfoDto;
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.vo.CattleBrandVO;
import com.polysoft.activity.model.vo.FirstLoginRedVO;
import com.polysoft.activity.model.vo.ShareLinkVO; import com.polysoft.activity.model.vo.ShareLinkVO;
import com.polysoft.activity.model.vo.UserInfoVO; import com.polysoft.activity.model.vo.UserInfoVO;
import com.polysoft.activity.model.vo.WechatToken; 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.SHA1; import com.polysoft.activity.utils.SHA1;
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.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.text.ParseException;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.UUID; import java.util.UUID;
...@@ -29,6 +45,10 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -29,6 +45,10 @@ public class UserInfoServiceImpl implements UserInfoService {
@Resource @Resource
private UserInfoMapper mapper; private UserInfoMapper mapper;
@Resource @Resource
private CattleBrandMapper cattleBrandMapper;
@Resource
private ActivityMapper activityMapper;
@Resource
private RestTemplate restTemplate; private RestTemplate restTemplate;
@Value("${wechat.appId}") @Value("${wechat.appId}")
private String appId; private String appId;
...@@ -81,4 +101,63 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -81,4 +101,63 @@ public class UserInfoServiceImpl implements UserInfoService {
shareLinkVO.setSignature(SHA1.encode(signStr)); shareLinkVO.setSignature(SHA1.encode(signStr));
return ApiResult.ok(shareLinkVO); return ApiResult.ok(shareLinkVO);
} }
@Override
public ApiResult saveUserSign(UserInfoParam param) {
UserSignDto userSignDto = new UserSignDto();
if(param.getSignId() != null){
userSignDto.setId(param.getSignId());
userSignDto.setCreateTime(new Date());
userSignDto.setSignStatus("2");
mapper.updateUserSign(userSignDto);
}else {
List<CattleBrandVO> cattleList = cattleBrandMapper.queryCattleBrandList();
userSignDto.setId(SnowFlakeUtil.nextId());
userSignDto.setUserId(param.getUserId());
userSignDto.setSignStatus("1");
userSignDto.setSignDate(new Date());
userSignDto.setCreateTime(new Date());
mapper.saveUserSign(userSignDto);
List<SaveUserCattleDto> list = new ArrayList<>();
SaveUserCattleDto dto = new SaveUserCattleDto();
dto.setId(SnowFlakeUtil.nextId());
dto.setUserId(param.getUserId());
dto.setCattleBrandId(cattleList.get(new Random().nextInt(5)).getCattleId());
mapper.saveCattleBrand(list);
}
return ApiResult.ok();
}
@Override
public ApiResult getFirsetLgoinRed(Long userId) {
//首次登录未领取的红包
try {
List<FirstLoginRedVO> firstLoginRedVOList = mapper.queryFirstLoginRed();
if(firstLoginRedVOList != null && firstLoginRedVOList.size() >0){
//新增到红包雨表 作为红包基础数据
FirstLoginRedVO redVO = firstLoginRedVOList.get(new Random().nextInt(firstLoginRedVOList.size()));
AddRedRainDto dto = new AddRedRainDto();
dto.setRedId(SnowFlakeUtil.nextId());
dto.setUserId(userId);
dto.setRedAmount(redVO.getAmount());
dto.setRedType("0");
dto.setIsEnble("1");
dto.setBatchNum(4);
dto.setCreateTime(new Date());
activityMapper.saveRedRainForOne(dto);
//更新聚宝盆余额
List<UserInfoDto> userInfoDtoList = new ArrayList<>();
UserInfoDto userInfoDto = new UserInfoDto();
userInfoDto.setUserId(userId);
userInfoDto.setRedBalance(redVO.getAmount());
userInfoDtoList.add(userInfoDto);
mapper.updateRedBalace(userInfoDtoList);
return ApiResult.ok(redVO.getAmount());
}
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error();
}
return ApiResult.ok();
}
} }
...@@ -186,7 +186,7 @@ public class InitRedPackageTask { ...@@ -186,7 +186,7 @@ public class InitRedPackageTask {
userInfoDtoList.add(dto); userInfoDtoList.add(dto);
}); });
userInfoMapper.updateRedBalace(userInfoDtoList); userInfoMapper.updateRedBalace(userInfoDtoList);
//更户牛牌 //更户牛牌
CalculateAmoutDto calculateAmoutDto2 = new CalculateAmoutDto(); CalculateAmoutDto calculateAmoutDto2 = new CalculateAmoutDto();
calculateAmoutDto2.setRedType("2"); calculateAmoutDto2.setRedType("2");
calculateAmoutDto2.setBatchNum(batchNum); calculateAmoutDto2.setBatchNum(batchNum);
...@@ -232,7 +232,7 @@ public class InitRedPackageTask { ...@@ -232,7 +232,7 @@ public class InitRedPackageTask {
while(true){ while(true){
String str = format.format(r.nextDouble()*nextMoney); String str = format.format(r.nextDouble()*nextMoney);
redMoney = Double.parseDouble(str); redMoney = Double.parseDouble(str);
if(redMoney>0 && redMoney < middle){ if(redMoney>0.01 && redMoney < middle ){
break; break;
} }
} }
...@@ -246,14 +246,10 @@ public class InitRedPackageTask { ...@@ -246,14 +246,10 @@ public class InitRedPackageTask {
return dou; return dou;
} }
public static void main(String[] args) { public static void main(String[] args) {
/*double [] ss = new InitRedPackageTask().getMoney(5000.00*0.25,100); double [] ss = new InitRedPackageTask().getMoney(1000,15);
for (double s : ss) { for (double s : ss) {
System.out.println(s); System.out.println(s);
}*/
for(int i =0;i<20;i++){
int k = new Random().nextInt(5);
System.out.println(k);
} }
} }
} }
...@@ -85,7 +85,7 @@ public class MathRandom { ...@@ -85,7 +85,7 @@ public class MathRandom {
{ {
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.50,0.30,0.15,0.04,0.01);
for (i = 0; i <= 100; i++)//打印100个测试概率的准确性 for (i = 0; i < 1; i++)//打印100个测试概率的准确性
{ {
System.out.println(a.PercentageRandom()+1); System.out.println(a.PercentageRandom()+1);
} }
......
...@@ -17,6 +17,27 @@ ...@@ -17,6 +17,27 @@
) )
</foreach> </foreach>
</insert> </insert>
<insert id="saveRedRainForOne" parameterType="com.polysoft.activity.model.dto.AddRedRainDto">
INSERT into t_red_rain (
red_id,
user_id,
red_amount,
red_type,
is_enble,
batch_num,
create_time
)VALUES
(
#{redId},
#{userId},
#{redAmount},
#{redType},
#{isEnble},
#{batchNum},
#{createTime}
)
</insert>
<update id="updateActStatus"> <update id="updateActStatus">
update act_item update act_item
set activity_status=#{status} set activity_status=#{status}
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.polysoft.activity.mapper.CattleBrandMapper"> <mapper namespace="com.polysoft.activity.mapper.CattleBrandMapper">
<select id="queryCattleBrandList" resultType="com.polysoft.activity.model.vo.CattleBrandVO"> <select id="queryCattleBrandList" resultType="com.polysoft.activity.model.vo.CattleBrandVO">
select select
cattle_id, cattle_id,
......
...@@ -7,13 +7,20 @@ ...@@ -7,13 +7,20 @@
user_name, user_name,
red_balance, red_balance,
phone, phone,
dept_name dept_name,
is_first
from from
t_user where phone=#{phone} t_user where phone=#{phone}
</select> </select>
<select id="getWechatToken" resultType="com.polysoft.activity.model.vo.WechatToken"> <select id="getWechatToken" resultType="com.polysoft.activity.model.vo.WechatToken">
select access_token,update_time from wechat_token where id =1 select access_token,update_time from wechat_token where id =1
</select> </select>
<select id="queryFirstLoginRed" resultType="com.polysoft.activity.model.vo.FirstLoginRedVO">
SELECT
id,
amount
from t_first_login_red where is_flag = '0'
</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
</update> </update>
...@@ -46,4 +53,26 @@ ...@@ -46,4 +53,26 @@
) )
</foreach> </foreach>
</insert> </insert>
<insert id="saveUserSign" parameterType="com.polysoft.activity.model.dto.UserSignDto">
INSERT INTO t_user_sign(
id,
user_id,
sign_date,
sign_status,
create_time
)VALUES (
#{id},
#{userId},
#{signDate},
#{signStatus},
#{createTime}
)
</insert>
<insert id="updateUserSign" parameterType="com.polysoft.activity.model.dto.UserSignDto">
UPDATE t_user_sign
SET
sign_status =#{signStatus},
create_time =#{#{createTime}
where id = #{id}
</insert>
</mapper> </mapper>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!