src/main/java/cc/mrbird/febs/dapp/controller/AdminOnHookPlanController.java
@@ -4,9 +4,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.dapp.entity.IgtOnHookPlanOrder; import cc.mrbird.febs.dapp.entity.MallNewsInfo; import cc.mrbird.febs.dapp.service.AdminOnHookPlanService; import cc.mrbird.febs.dapp.service.IMallNewsInfoService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; src/main/java/cc/mrbird/febs/dapp/controller/ApiIgtOnHookPlanController.java
@@ -4,6 +4,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.dapp.dto.ApiStartDto; import cc.mrbird.febs.dapp.service.ApiIgtOnHookPlanService; import cc.mrbird.febs.dapp.vo.ApiAwardInfoVo; import cc.mrbird.febs.dapp.vo.ApiMemberWalletCoinVo; import cc.mrbird.febs.dapp.vo.ApiPlanInfoVo; import io.swagger.annotations.Api; @@ -45,4 +46,13 @@ public FebsResponse planInfo() { return igtOnHookPlanService.planInfo(); } @ApiOperation(value = "IGT历史记录", notes = "历史记录") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiAwardInfoVo.class) }) @PostMapping(value = "/awardInfo") public FebsResponse awardInfo() { return igtOnHookPlanService.awardInfo(); } } src/main/java/cc/mrbird/febs/dapp/entity/DappOnHookAward.java
New file @@ -0,0 +1,21 @@ package cc.mrbird.febs.dapp.entity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; @Data @TableName("dapp_on_hook_award") public class DappOnHookAward extends BaseEntity { private String recordNum;//期号 private String awardNum;//中奖号码 private Integer state;//开奖状态 1:一开奖 2:未开奖 private Date awardTime;//开奖时间 } src/main/java/cc/mrbird/febs/dapp/entity/IgtOnHookPlanOrderItem.java
@@ -25,7 +25,7 @@ //1:未开奖2:中奖3未中奖 private Integer isGoal; //所属期数 private Integer belongNum; private String belongNum; //开奖顺序 private Integer orderNum; src/main/java/cc/mrbird/febs/dapp/mapper/DappOnHookAwardDao.java
New file @@ -0,0 +1,16 @@ package cc.mrbird.febs.dapp.mapper; import cc.mrbird.febs.dapp.entity.DappOnHookAward; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import java.util.List; public interface DappOnHookAwardDao extends BaseMapper<DappOnHookAward> { List<DappOnHookAward> selectByRecordNumAndStateLimit(@Param("recordNum")String yyyyMMdd, @Param("state")int state, @Param("limit")int i); DappOnHookAward selectByByAwardTime(@Param("awardTime")String yyyyMMddHHMM); List<DappOnHookAward> selectInfoByByAwardTime(@Param("awardTime")String yyyyMMddHHMM); } src/main/java/cc/mrbird/febs/dapp/mapper/IgtOnHookPlanOrderItemDao.java
@@ -15,4 +15,6 @@ BigDecimal selectTotalAmountByByOrderIdAndMemberIdAndState(@Param("orderId") Long orderId, @Param("memberId")Long memberId , @Param("state")int i, @Param("isGoal")int isGoal); IgtOnHookPlanOrderItem selectByMemberIdAndBelongNum( @Param("memberId")Long memberId, @Param("recordNum")String recordNum); } src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
@@ -21,4 +21,6 @@ * @return */ BigDecimal getTotalFrofit(Long memberId); FebsResponse awardInfo(); } src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
@@ -5,14 +5,17 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.dto.ApiStartDto; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum; import cc.mrbird.febs.dapp.enumerate.MemberOnHookPlanEnum; import cc.mrbird.febs.dapp.mapper.*; import cc.mrbird.febs.dapp.service.ApiIgtOnHookPlanService; import cc.mrbird.febs.dapp.vo.ApiAwardInfoVo; import cc.mrbird.febs.dapp.vo.ApiPlanInfoVo; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSON; @@ -28,10 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.*; @Slf4j @Service @@ -44,6 +44,8 @@ private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final DappMemberDao dappMemberDao; private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao; private final RedisUtils redisUtils; private final DappOnHookAwardDao dappOnHookAwardDao; @Override @Transactional(rollbackFor = Exception.class) public FebsResponse start(ApiStartDto apiStartDto) { @@ -143,8 +145,20 @@ if(CollUtil.isEmpty(isProfitPlan)){ throw new FebsException(MessageSourceUtils.getString("login_err_003")); } //获取下一个开奖 String redisKey = "on_hook_award_id"; String onHookAwardRedisId = redisUtils.getString(redisKey); DappOnHookAward dappOnHookAward = dappOnHookAwardDao.selectById(Long.parseLong(onHookAwardRedisId)); if(ObjectUtil.isEmpty(dappOnHookAward)){ throw new FebsException(MessageSourceUtils.getString("login_err_003")); } Date awardTime = dappOnHookAward.getAwardTime(); DateTime dateTime = DateUtil.offsetMinute(awardTime, 5); int orderNum = 1; for(String profitPlan : isProfitPlan){ String yyyyMMddHHMM = DateUtil.format(dateTime, "yyyy-MM-dd hh:mm"); DappOnHookAward dappOnHookAwardNext = dappOnHookAwardDao.selectByByAwardTime(yyyyMMddHHMM); JSONObject jsonObject = JSONUtil.parseObj(profitPlan); IgtOnHookPlanOrderItem igtOnHookPlanOrderItem = new IgtOnHookPlanOrderItem(); igtOnHookPlanOrderItem.setMemberId(memberId); @@ -155,9 +169,11 @@ igtOnHookPlanOrderItem.setState(2); igtOnHookPlanOrderItem.setPlanCode(planCode); igtOnHookPlanOrderItem.setIsGoal(1); igtOnHookPlanOrderItem.setBelongNum(dappOnHookAwardNext.getRecordNum()); igtOnHookPlanOrderItem.setOrderNum(orderNum); igtOnHookPlanOrderItemDao.insert(igtOnHookPlanOrderItem); orderNum++; dateTime = DateUtil.offsetMinute(dateTime, 5); } DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, availableAmount, balance @@ -234,6 +250,32 @@ return totalProfit; } @Override public FebsResponse awardInfo() { DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser(); Long memberId = dappMemberEntity.getId(); ArrayList<ApiAwardInfoVo> apiAwardInfoVos = new ArrayList<>(); DateTime date = DateUtil.date(); String yyyyMMddHHMM = DateUtil.format(date, "yyyy-MM-dd hh:mm"); List<DappOnHookAward> dappOnHookAwards = dappOnHookAwardDao.selectInfoByByAwardTime(yyyyMMddHHMM); if(CollUtil.isNotEmpty(dappOnHookAwards)){ for(DappOnHookAward dappOnHookAward : dappOnHookAwards){ ApiAwardInfoVo apiAwardInfoVo = new ApiAwardInfoVo(); apiAwardInfoVo.setAwardNum(dappOnHookAward.getAwardNum()); apiAwardInfoVo.setRecordNum(dappOnHookAward.getRecordNum()); IgtOnHookPlanOrderItem igtOnHookPlanOrderItem = igtOnHookPlanOrderItemDao.selectByMemberIdAndBelongNum(memberId,dappOnHookAward.getRecordNum()); if(ObjectUtil.isNotEmpty(igtOnHookPlanOrderItem)){ BigDecimal bigDecimal = igtOnHookPlanOrderItem.getAmount().setScale(1, BigDecimal.ROUND_DOWN); apiAwardInfoVo.setAmount(bigDecimal.toString()); }else{ apiAwardInfoVo.setAmount("-"); } apiAwardInfoVos.add(apiAwardInfoVo); } } return new FebsResponse().success().data(apiAwardInfoVos); } private String getProfitCase(String identity,BigDecimal balance){ //匹配会员等级获取对应的收益率 List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.LEVEL_MB.getType()); src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -526,7 +526,7 @@ Integer startTime = DateUtil.timeToSecond(startTimeDic.getValue()); Integer endTime = DateUtil.timeToSecond(endTimeDic.getValue()); if(startTime <= dateNow && endTime >= dateNow){ return new FebsResponse().fail().message(MessageSourceUtils.getString("member_err_006")); return new FebsResponse().fail().message(MessageSourceUtils.getString("member_err_0012")); } @@ -548,7 +548,8 @@ } String inviteIdIn = memberEntityIn.getInviteId(); Boolean isMemberIn = dappMemberService.isMember(apiTransferInsideDto.getInviteId()); Boolean isMemberIn = dappMemberService.isMember(inviteIdIn); // Boolean isMemberIn = dappMemberService.isMember(apiTransferInsideDto.getInviteId()); if(!isMemberIn){ return new FebsResponse().fail().message(MessageSourceUtils.getString("member_err_003")); } src/main/java/cc/mrbird/febs/dapp/vo/ApiAwardInfoVo.java
New file @@ -0,0 +1,22 @@ package cc.mrbird.febs.dapp.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel(value = "ApiAwardInfoVo", description = "历史记录") public class ApiAwardInfoVo { @ApiModelProperty(value = "期号") private String recordNum; @ApiModelProperty(value = "中奖号码") private String awardNum; @ApiModelProperty(value = "金额") private String amount; } src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java
@@ -1,10 +1,15 @@ package cc.mrbird.febs.job; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.mapper.*; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.jline.utils.Log; import org.springframework.beans.factory.annotation.Autowired; @@ -12,6 +17,8 @@ import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.Format; import java.util.List; @Slf4j @@ -33,6 +40,12 @@ @Autowired private DappMemberDao dappMemberDao; @Autowired private DappOnHookAwardDao dappOnHookAwardDao; @Autowired private RedisUtils redisUtils; /** * 五分钟更新一次数据 * 让挂机字表的状态为1:已生效 @@ -43,14 +56,13 @@ // @Scheduled(cron = "0/5 * * * * ? ") @Scheduled(cron = "0 0/5 * * * ? ") public void updatePlanOrderItem(){ Log.info("开始更新挂机字表状态"); Log.info("开始更新挂机子表状态"); List<IgtOnHookPlanOrder> igtOnHookPlanOrders = igtOnHookPlanOrderDao.selectByState(1); if(CollUtil.isEmpty(igtOnHookPlanOrders)){ return; } for(IgtOnHookPlanOrder igtOnHookPlanOrder : igtOnHookPlanOrders){ //让挂机子表的状态为1:已生效 //todo 获取所属期数去更新数据 Long orderId = igtOnHookPlanOrder.getId(); Long memberId = igtOnHookPlanOrder.getMemberId(); IgtOnHookPlanOrderItem igtOnHookPlanOrderItem = igtOnHookPlanOrderItemDao.selectByOrderIdAndMemberIdAndState(orderId,memberId,2); @@ -141,4 +153,69 @@ } @Scheduled(cron = "0 0/1 * * * ? ") public void createAwardInfo(){ Log.info("挂架开奖记录"); /** * 每天跑一次,直接生成全部的记录 * 产生中奖记录 */ //每天开奖次数 288次 DateTime date = DateUtil.date(); String aWardTime = DateUtil.format(date, "yyyy-MM-dd"); DateTime aWardTimeStart = DateUtil.parseDateTime(aWardTime + " 00:00:00"); // DateTime dateTime = DateUtil.offsetMinute(aWardTimeStart, 5); String yyyyMMdd = DateUtil.format(date, "yyyyMMdd"); QueryWrapper<DappOnHookAward> dappOnHookAwardQueryWrapper = new QueryWrapper(); dappOnHookAwardQueryWrapper.like("record_num",yyyyMMdd); Integer selectCount = dappOnHookAwardDao.selectCount(dappOnHookAwardQueryWrapper); if(0 < selectCount){ return; } Format formatCount = new DecimalFormat("000"); //一般都是将累加的数字当做一些单号的一部分,format要求string int dayMillise = (24 * 60) / 5; for(int i= 0;i < dayMillise;i++){ DappOnHookAward dappOnHookAward = new DappOnHookAward(); int randomInt = RandomUtil.randomInt(10000, 99999); dappOnHookAward.setAwardNum(Integer.toString(randomInt)); dappOnHookAward.setState(2); String str = formatCount.format(i); dappOnHookAward.setRecordNum(yyyyMMdd+str); dappOnHookAward.setAwardTime(aWardTimeStart); dappOnHookAwardDao.insert(dappOnHookAward); aWardTimeStart = DateUtil.offsetMinute(aWardTimeStart, 5); } } @Scheduled(cron = "0 0/5 * * * ? ") public void updateAwardInfo(){ Log.info("更新挂架开奖记录"); DateTime date = DateUtil.date(); String yyyyMMddHHMM = DateUtil.format(date, "yyyy-MM-dd hh:mm"); DappOnHookAward dappOnHookAward = dappOnHookAwardDao.selectByByAwardTime(yyyyMMddHHMM); dappOnHookAward.setState(1); dappOnHookAwardDao.updateById(dappOnHookAward); String redisKey = "on_hook_award_id"; String onHookAwardRedisId = redisUtils.getString(redisKey); if(StrUtil.isBlank(onHookAwardRedisId)){ redisUtils.set(redisKey,dappOnHookAward.getId().toString(),0L); } redisUtils.set(redisKey,dappOnHookAward.getId().toString(),0L); } public static void main(String[] args) { DateTime date = DateUtil.date(); String aWardTime = DateUtil.format(date, "yyyy-MM-dd"); DateTime aWardTimeStart = DateUtil.parseDateTime(aWardTime + " 00:00:00"); int dayMillise = (24 * 60) / 5; for(int i= 0;i < dayMillise;i++){ System.out.println(aWardTimeStart); aWardTimeStart = DateUtil.offsetMinute(aWardTimeStart, 5); } } } src/main/resources/mapper/dapp/DappAccountMoneyChangeDao.xml
@@ -28,10 +28,10 @@ and a.type=#{record.type} </if> <if test="record.startTime != null and record.startTime != ''"> and a.create_time >= #{record.startTime} and date_format(a.create_time, '%Y-%m-%d') >= #{record.startTime} </if> <if test="record.endTime != null and record.endTime != ''"> and a.create_time <= #{record.endTime} and date_format(a.create_time, '%Y-%m-%d') <= #{record.endTime} </if> </where> order by a.create_time desc src/main/resources/mapper/dapp/DappOnHookAwardDao.xml
New file @@ -0,0 +1,34 @@ <?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"> <mapper namespace="cc.mrbird.febs.dapp.mapper.DappOnHookAwardDao"> <select id="selectByRecordNumAndStateLimit" resultType="cc.mrbird.febs.dapp.entity.DappOnHookAward"> select a.* from dapp_on_hook_award a where a.record_num like concat(#{recordNum},'%') and a.state = #{state} order by a.id asc limit #{limit} </select> <select id="selectByByAwardTime" resultType="cc.mrbird.febs.dapp.entity.DappOnHookAward"> select a.* from dapp_on_hook_award a where date_format(a.award_time, '%Y-%m-%d %H:%i') = #{awardTime} limit 1 </select> <select id="selectInfoByByAwardTime" resultType="cc.mrbird.febs.dapp.entity.DappOnHookAward"> select a.* from dapp_on_hook_award a where date_format(a.award_time, '%Y-%m-%d %H:%i') < #{awardTime} limit 20 </select> </mapper> src/main/resources/mapper/dapp/IgtOnHookPlanOrderItemDao.xml
@@ -33,5 +33,15 @@ and a.state = #{state} </select> <select id="selectByMemberIdAndBelongNum" resultType="cc.mrbird.febs.dapp.entity.IgtOnHookPlanOrderItem"> SELECT a.* FROM igt_on_hook_plan_order_item a where a.member_id = #{memberId} and a.belong_num = #{recordNum} limit 1 </select> </mapper>