Commit b9ffaba9 by lvyp

红包雨-红包发放

1 parent 59f8c1d4
Showing 20 changed files with 216 additions and 61 deletions
......@@ -3,8 +3,10 @@ package com.polysoft.activity.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.polysoft.activity.model.dto.ActItemDto;
import com.polysoft.activity.model.dto.AddRedRainDto;
import com.polysoft.activity.model.dto.CalculateAmoutDto;
import com.polysoft.activity.model.dto.QueryRedRainDto;
import com.polysoft.activity.model.vo.ActItemVO;
import com.polysoft.activity.model.vo.RedAmountTotalVO;
import com.polysoft.activity.model.vo.RedRainVO;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;
......@@ -19,9 +21,12 @@ import java.util.List;
public interface ActivityMapper extends BaseMapper<ActItemDto> {
List<ActItemVO> queryActivityInfo();
int updateActStatus(@Param("id")Long id ,@Param("status") int status);
int updateActStatus(@Param("id")Long id ,@Param("status") String status);
int saveRedRain(@Param("list") List<AddRedRainDto> list);
List<RedRainVO> queryRedRainList(QueryRedRainDto dto);
int updateRedPackage(List<AddRedRainDto> dto);
int updateRedPackageForCattle(List<AddRedRainDto> dto);
List<RedAmountTotalVO> calculateRedAmountTatol(CalculateAmoutDto dto);
List<RedAmountTotalVO> calculateCattleBrand(CalculateAmoutDto dto);
}
package com.polysoft.activity.mapper;
import com.polysoft.activity.model.dto.SaveUserCattleDto;
import com.polysoft.activity.model.dto.UserInfoDto;
import com.polysoft.activity.model.dto.WechatTokenDto;
import com.polysoft.activity.model.vo.UserInfoVO;
import com.polysoft.activity.model.vo.WechatToken;
......@@ -13,4 +15,6 @@ public interface UserInfoMapper {
UserInfoVO queryAuthUser(@Param("phone") String phone);
WechatToken getWechatToken();
int updateWechatToken(WechatTokenDto dto);
int updateRedBalace(@Param("list") List<UserInfoDto> list);
int saveCattleBrand(@Param("list") List<SaveUserCattleDto> list);
}
......@@ -18,12 +18,12 @@ public class AddRedRainDto {
//红包金额
private BigDecimal redAmount ;
//红包类型 0 普通红包 1 牛牌
private int redType ;
private String redType ;
//牛牌主键
private Long cattleBrandId ;
private String createTime;
//0 未结算 1 已结算
private int isEnble;
private String isEnble;
//红包雨批次号
private int batchNum;
......
......@@ -25,13 +25,13 @@ public class AddWishDto {
@ApiModelProperty("心愿语录内容")
private String wishContext ;
@ApiModelProperty("0 未中奖 1 中奖")
private int prizeFalg =0;
private String prizeFalg ;
@ApiModelProperty("创建日期")
private String createTime ;
@ApiModelProperty("发布日期 示例:2020-01-21")
private String pushDate ;
@ApiModelProperty("0 未删除 1 已删除")
private int deleteFalg =0 ;
private String deleteFalg ;
public void setCreateTime(Date date) {
this.createTime = DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");
......
package com.polysoft.activity.model.dto;
import lombok.Data;
@Data
public class CalculateAmoutDto {
private String redType;
private int batchNum;
}
......@@ -8,7 +8,7 @@ import lombok.Data;
@TableName("t_cattle_brand")
public class CattleBrandDto {
private Long cattleId;
private int brandType;
private String brandType;
private String brandName;
}
......@@ -13,7 +13,7 @@ public class QueryRedRainDto {
//红包类型 0 普通红包 1 牛牌
private Long redType ;
//0 未结算 1 已结算
private int isEnble;
private String isEnble;
//红包雨批次号
private int batchNum;
......
package com.polysoft.activity.model.dto;
import lombok.Data;
@Data
public class SaveUserCattleDto {
private Long id;
private Long userId;
private Long cattleBrandId;
}
package com.polysoft.activity.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@ApiModel("用户信息类")
@Data
public class UserInfoDto implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("用户主键")
private Long userId;
@ApiModelProperty("用户名")
private String userName;
@ApiModelProperty("用户名")
private String phone;
@ApiModelProperty("用户名")
private BigDecimal redBalance;
@ApiModelProperty("部门名称")
private String deptName;
}
......@@ -27,7 +27,7 @@ public class AddWishParam {
@NotBlank(message = "心愿语录内容不能为空")
private String wishContext ;
@ApiModelProperty("0 未中奖 1 中奖")
private int prizeFalg =0;
private String prizeFalg ;
@ApiModelProperty("图片")
@NotBlank(message = "心愿图片不能为空")
private List<MultipartFile> multipartFiles;
......
......@@ -13,5 +13,5 @@ public class ActItemVO {
private String activityName;
private String startTime;
private String emdTime;
private int activityStatus;
private String activityStatus;
}
......@@ -5,7 +5,7 @@ import lombok.Data;
@Data
public class CattleBrandVO {
private Long cattleId;
private int brandType;
private String brandType;
private String brandName;
}
package com.polysoft.activity.model.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class RedAmountTotalVO {
private Long userId;
private BigDecimal redAmountTatol;
private Long cattleBrandId;
}
......@@ -18,11 +18,11 @@ public class RedRainVO {
//红包金额
private BigDecimal redAmount ;
//红包类型 0 普通红包 1 牛牌
private int redType ;
private String redType ;
//牛牌主键
private Long cattleBrandId ;
//0 未结算 1 已结算
private int isEnble;
private String isEnble;
//红包雨批次号
private int batchNum;
......
......@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@ApiModel("用户信息类")
@Data
public class UserInfoVO implements Serializable {
......@@ -16,5 +18,7 @@ public class UserInfoVO implements Serializable {
@ApiModelProperty("用户名")
private String phone;
@ApiModelProperty("用户名")
private double redBalance;
private BigDecimal redBalance;
@ApiModelProperty("部门名称")
private String dept_name;
}
......@@ -23,12 +23,12 @@ public class WishVO {
@ApiModelProperty("心愿语录内容")
private String wishContext ;
@ApiModelProperty("0 未中奖 1 中奖")
private int prizeFalg =0;
private String prizeFalg ;
@ApiModelProperty("创建日期")
private String createTime ;
@ApiModelProperty("发布日期 示例:2020-01-21")
private String pushDate ;
@ApiModelProperty("0 未删除 1 已删除")
private int deleteFalg =0 ;
private String deleteFalg ;
private String picUrl;
}
......@@ -27,24 +27,24 @@ public class ActItemServiceImpl implements ActItemService{
public ApiResult queryActivityInfo() {
List<ActItemVO> list = activityMapper.queryActivityInfo();
for (ActItemVO item : list) {
if(item.getActivityStatus() != 3) {
if(!"3".equals(item.getActivityStatus())) {
Long startTime = DateUtil.parse(item.getStartTime(), "yyyy-MM-dd HH:mm:ss").getTime() / 1000;
Long endTime = DateUtil.parse(item.getEmdTime(), "yyyy-MM-dd HH:mm:ss").getTime() / 1000;
Long cuttentTime = System.currentTimeMillis() / 1000;
if (cuttentTime > startTime && cuttentTime < endTime) {
//正在进行
activityMapper.updateActStatus(item.getId(), 1);
item.setActivityStatus(1);
activityMapper.updateActStatus(item.getId(), "1");
item.setActivityStatus("1");
}
if(cuttentTime < startTime && (startTime - cuttentTime) <30){
//即将开始
activityMapper.updateActStatus(item.getId(), 2);
item.setActivityStatus(2);
activityMapper.updateActStatus(item.getId(), "2");
item.setActivityStatus("2");
}
if (cuttentTime > endTime) {
//已结束
activityMapper.updateActStatus(item.getId(), 3);
item.setActivityStatus(3);
activityMapper.updateActStatus(item.getId(), "3");
item.setActivityStatus("3");
}
}
}
......
......@@ -4,11 +4,13 @@ import cn.hutool.core.date.DateUtil;
import com.polysoft.activity.common.log.LoggerHelper;
import com.polysoft.activity.common.utils.BeanTransferUtils;
import com.polysoft.activity.mapper.ActivityMapper;
import com.polysoft.activity.model.dto.AddRedRainDto;
import com.polysoft.activity.model.dto.QueryRedRainDto;
import com.polysoft.activity.mapper.UserInfoMapper;
import com.polysoft.activity.model.dto.*;
import com.polysoft.activity.model.vo.CattleBrandVO;
import com.polysoft.activity.model.vo.RedAmountTotalVO;
import com.polysoft.activity.model.vo.RedRainVO;
import com.polysoft.activity.service.CattleBrandService;
import com.polysoft.activity.utils.SnowFlakeUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
......@@ -36,14 +38,17 @@ public class InitRedPackageTask {
private ActivityMapper activityMapper;
@Resource
private CattleBrandService cattleBrandService;
@Resource
private UserInfoMapper userInfoMapper;
// @Scheduled(initialDelay = 10000, fixedRate = 1*15*60*1000)
@Scheduled( cron = "50 06 22 * * ? ")
@Scheduled( cron = "20 42 23 * * ? ")
public void execute() {
sendWechat();
}
private void sendWechat(){
Long stime = System.currentTimeMillis()/1000;
//红包雨开始时间
// Long batch1 = DateUtil.parse("2021-02-11 20:00:00","yyyy-MM-dd HH:mm:ss").getTime()/1000;
// Long batch2 = DateUtil.parse("2021-02-11 22:00:00","yyyy-MM-dd HH:mm:ss").getTime()/1000;
......@@ -67,11 +72,11 @@ public class InitRedPackageTask {
int batchNum = 1;
double totalMoney = 5000.00;
if(1==1){
QueryRedRainDto dto = new QueryRedRainDto();
QueryRedRainDto dto1 = new QueryRedRainDto();
List<AddRedRainDto> batchList = new ArrayList<>();
dto.setIsEnble(0);
dto.setBatchNum(batchNum);
List<RedRainVO> list = activityMapper.queryRedRainList(dto);
dto1.setIsEnble("0");
dto1.setBatchNum(batchNum);
List<RedRainVO> list = activityMapper.queryRedRainList(dto1);
//前10%红包
int redNum = (int)(list.size()*0.1);
double [] redAmount = getMoney(5000.00*0.25,redNum);
......@@ -80,8 +85,8 @@ public class InitRedPackageTask {
for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list.get(s),AddRedRainDto.class);
addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount[i]));
addRedRainDto.setRedType(1);
addRedRainDto.setIsEnble(1);
addRedRainDto.setRedType("1");
addRedRainDto.setIsEnble("1");
batchList.add(addRedRainDto);
i++;
}
......@@ -90,15 +95,15 @@ public class InitRedPackageTask {
//20%红包
if(2==2){
//获取红包总数
QueryRedRainDto dto = new QueryRedRainDto();
dto.setBatchNum(batchNum);
List<RedRainVO> list = activityMapper.queryRedRainList(dto);
List<AddRedRainDto> batchList2 = new ArrayList<>();
//获取未结算的红包数
QueryRedRainDto dto2 = new QueryRedRainDto();
dto2.setIsEnble(0);
dto2.setBatchNum(batchNum);
List<RedRainVO> list2 = activityMapper.queryRedRainList(dto);
List<RedRainVO> list = activityMapper.queryRedRainList(dto2);
List<AddRedRainDto> batchList2 = new ArrayList<>();
//获取未结算的红包数
QueryRedRainDto dto2_1 = new QueryRedRainDto();
dto2_1.setIsEnble("0");
dto2_1.setBatchNum(batchNum);
List<RedRainVO> list2 = activityMapper.queryRedRainList(dto2_1);
//前20%红包
int redNum = (int)(list.size()*0.2);
......@@ -108,8 +113,8 @@ public class InitRedPackageTask {
for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class);
addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount[i]));
addRedRainDto.setRedType(1);
addRedRainDto.setIsEnble(1);
addRedRainDto.setRedType("1");
addRedRainDto.setIsEnble("1");
batchList2.add(addRedRainDto);
i++;
}
......@@ -117,15 +122,15 @@ public class InitRedPackageTask {
}
if(3==3){
//获取红包总数
QueryRedRainDto dto = new QueryRedRainDto();
dto.setBatchNum(batchNum);
List<RedRainVO> list = activityMapper.queryRedRainList(dto);
QueryRedRainDto dto3 = new QueryRedRainDto();
dto3.setBatchNum(batchNum);
List<RedRainVO> list = activityMapper.queryRedRainList(dto3);
List<AddRedRainDto> batchList2 = new ArrayList<>();
//获取未结算的红包数
QueryRedRainDto dto2 = new QueryRedRainDto();
dto2.setIsEnble(0);
dto2.setBatchNum(batchNum);
List<RedRainVO> list2 = activityMapper.queryRedRainList(dto);
QueryRedRainDto dto3_1 = new QueryRedRainDto();
dto3_1.setIsEnble("0");
dto3_1.setBatchNum(batchNum);
List<RedRainVO> list2 = activityMapper.queryRedRainList(dto3_1);
//前65%红包
int redNum = (int)(list.size()*0.65);
double [] redAmount = getMoney(5000.00*0.5,redNum);
......@@ -134,8 +139,8 @@ public class InitRedPackageTask {
for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class);
addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount[i]));
addRedRainDto.setRedType(1);
addRedRainDto.setIsEnble(1);
addRedRainDto.setRedType("1");
addRedRainDto.setIsEnble("1");
batchList2.add(addRedRainDto);
i++;
}
......@@ -143,15 +148,15 @@ public class InitRedPackageTask {
}
if(4==4){
//获取红包总数
QueryRedRainDto dto = new QueryRedRainDto();
dto.setBatchNum(batchNum);
List<RedRainVO> list = activityMapper.queryRedRainList(dto);
QueryRedRainDto dto4 = new QueryRedRainDto();
dto4.setBatchNum(batchNum);
List<RedRainVO> list = activityMapper.queryRedRainList(dto4);
List<AddRedRainDto> batchList2 = new ArrayList<>();
//获取未结算的红包数
QueryRedRainDto dto2 = new QueryRedRainDto();
dto2.setIsEnble(0);
dto2.setBatchNum(batchNum);
List<RedRainVO> list2 = activityMapper.queryRedRainList(dto);
QueryRedRainDto dto4_1 = new QueryRedRainDto();
dto4_1.setIsEnble("0");
dto4_1.setBatchNum(batchNum);
List<RedRainVO> list2 = activityMapper.queryRedRainList(dto4_1);
//前5%红包牛牌
int redNum =list2.size();
HashSet<Integer> set = getLuckUser(redNum,list2.size());
......@@ -159,15 +164,44 @@ public class InitRedPackageTask {
int i = 0;
for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class);
int k = new Random().nextInt(4);
int k = new Random().nextInt(5);
addRedRainDto.setCattleBrandId(cattleList.get(k).getCattleId());
addRedRainDto.setRedType(2);
addRedRainDto.setIsEnble(1);
addRedRainDto.setRedType("2");
addRedRainDto.setIsEnble("1");
batchList2.add(addRedRainDto);
i++;
}
activityMapper.updateRedPackageForCattle(batchList2);
}
//更新聚宝盆
CalculateAmoutDto calculateAmoutDto = new CalculateAmoutDto();
calculateAmoutDto.setRedType("1");
calculateAmoutDto.setBatchNum(batchNum);
List<RedAmountTotalVO> lastList = activityMapper.calculateRedAmountTatol(calculateAmoutDto);
List<UserInfoDto> userInfoDtoList = new ArrayList<>();
lastList.forEach(item ->{
UserInfoDto dto = new UserInfoDto();
dto.setUserId(item.getUserId());
dto.setRedBalance(item.getRedAmountTatol());
userInfoDtoList.add(dto);
});
userInfoMapper.updateRedBalace(userInfoDtoList);
//更用户牛牌
CalculateAmoutDto calculateAmoutDto2 = new CalculateAmoutDto();
calculateAmoutDto2.setRedType("2");
calculateAmoutDto2.setBatchNum(batchNum);
List<RedAmountTotalVO> lastList2 = activityMapper.calculateCattleBrand(calculateAmoutDto2);
List<SaveUserCattleDto> saveUserCattleDtos = new ArrayList<>();
lastList2.forEach(item ->{
SaveUserCattleDto dto = new SaveUserCattleDto();
dto.setId(SnowFlakeUtil.nextId());
dto.setUserId(item.getUserId());
dto.setCattleBrandId(item.getCattleBrandId());
saveUserCattleDtos.add(dto);
});
userInfoMapper.saveCattleBrand(saveUserCattleDtos);
Long endTime = System.currentTimeMillis()/1000;
System.out.println(endTime-stime);
LoggerHelper.debug(this.getClass(),"任务结束");
}
private HashSet<Integer> getLuckUser(int count, int random){
......@@ -212,10 +246,14 @@ public class InitRedPackageTask {
return dou;
}
public static void main(String[] args) {
double [] ss = new InitRedPackageTask().getMoney(5000.00*0.25,100);
/*double [] ss = new InitRedPackageTask().getMoney(5000.00*0.25,100);
for (double s : ss) {
System.out.println(s);
}*/
for(int i =0;i<20;i++){
int k = new Random().nextInt(5);
System.out.println(k);
}
}
}
......@@ -107,5 +107,24 @@
</if>
order by red_id asc
</select>
<select id="calculateRedAmountTatol" resultType="com.polysoft.activity.model.vo.RedAmountTotalVO"
parameterType="com.polysoft.activity.model.dto.CalculateAmoutDto">
SELECT
t.user_id,
max( t.red_amount ) AS redAmountTatol
FROM
t_red_rain t where t.red_type=#{redType} and t.batch_num=#{batchNum}
GROUP BY
t.user_id
</select>
<select id="calculateCattleBrand" resultType="com.polysoft.activity.model.vo.RedAmountTotalVO"
parameterType="com.polysoft.activity.model.dto.CalculateAmoutDto">
SELECT
t.user_id,
t.cattle_brand_id
FROM
t_red_rain t where t.red_type=#{redType} and t.batch_num=#{batchNum}
</select>
</mapper>
......@@ -6,7 +6,8 @@
user_id ,
user_name,
red_balance,
phone
phone,
dept_name
from
t_user where phone=#{phone}
</select>
......@@ -16,4 +17,33 @@
<update id="updateWechatToken" parameterType="com.polysoft.activity.model.dto.WechatTokenDto">
update wechat_token set access_token=#{accessToken},update_time=#{updateTime} where id =1
</update>
<update id="updateRedBalace" parameterType="com.polysoft.activity.model.dto.UserInfoDto">
update t_user
<trim prefix="set" suffixOverrides=",">
<trim prefix=" red_balance = case" suffix="end,">
<foreach collection="list" item="item" index="index">
when user_id=#{item.userId} then red_balance+#{item.redBalance}
</foreach>
</trim>
</trim>
<where>
<foreach collection="list" separator="or" item="item" index="index">
user_id=#{item.userId}
</foreach>
</where>
</update>
<insert id="saveCattleBrand" parameterType="com.polysoft.activity.model.dto.SaveUserCattleDto">
INSERT into t_user_cattle (
id,
user_id,
cattle_brand_id
)VALUES
<foreach collection="list" item="item" index="index" separator =",">
(
#{item.id},
#{item.userId},
#{item.cattleBrandId}
)
</foreach>
</insert>
</mapper>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!