xiaoyong931011
2022-10-21 c6e21fc6d22a2168fb21a662c16c60fab05a7d75
20221021
10 files modified
4 files added
261 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/controller/AdminOnHookPlanController.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/ApiIgtOnHookPlanController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/DappOnHookAward.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/IgtOnHookPlanOrderItem.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappOnHookAwardDao.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/IgtOnHookPlanOrderItemDao.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java 50 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/vo/ApiAwardInfoVo.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java 81 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappAccountMoneyChangeDao.xml 4 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappOnHookAwardDao.xml 34 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/IgtOnHookPlanOrderItemDao.xml 10 ●●●●● patch | view | raw | blame | history
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 &gt;= #{record.startTime}
                and date_format(a.create_time, '%Y-%m-%d') &gt;= #{record.startTime}
            </if>
            <if test="record.endTime != null and record.endTime != ''">
                and a.create_time &lt;= #{record.endTime}
                and date_format(a.create_time, '%Y-%m-%d') &lt;= #{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') &lt; #{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>