KKSU
2024-02-21 0dded054a1744e032c30bc5b10fda1f2c94a4099
src/main/java/cc/mrbird/febs/mall/service/impl/CJServiceImpl.java
@@ -14,6 +14,7 @@
import cc.mrbird.febs.mall.dto.OpenPrice;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.AsyncCjService;
import cc.mrbird.febs.mall.service.CJService;
import cc.mrbird.febs.mall.service.IApiMallMemberService;
import cc.mrbird.febs.mall.vo.ApiKjInfoVo;
@@ -25,6 +26,7 @@
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 com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -52,6 +54,7 @@
    private final CjInfoMapper cjInfoMapper;
    private final CjItemMapper cjItemMapper;
    private final IApiMallMemberService mallMemberService;
    private final AsyncCjService asyncCjService;
    @Override
    public FebsResponse kjRecord(KjRecordDto kjRecordDto) {
@@ -82,7 +85,43 @@
        redisUtils.set(AppContants.KJ_RECORD_TIME, kjRecord.getCreatedTime(), 600);
        agentProducer.sendChouJiangDelayMsg(kjNo, 10 * 60 * 1000L);
        agentProducer.sendNoTimeDelayMsg(kjNo, 95 * 6 * 1000L);//提前三十秒停止下注
        agentProducer.sendNoTimeDelayMsg(kjNo, 9 * 60 * 1000L);//提一分钟停止下注
        //todo 测试下注
        ApiCreateDto apiCreateDto = new ApiCreateDto();
        List<ApiCreateItemDto> items = new ArrayList<>();
        ApiCreateItemDto apiCreateItemDto = new ApiCreateItemDto();
        apiCreateItemDto.setId(1L);
        apiCreateItemDto.setTzAmount(new BigDecimal("10"));
        items.add(apiCreateItemDto);
        ApiCreateItemDto apiCreateItemDto2 = new ApiCreateItemDto();
        apiCreateItemDto2.setId(2L);
        apiCreateItemDto2.setTzAmount(new BigDecimal("10"));
        items.add(apiCreateItemDto2);
        ApiCreateItemDto apiCreateItemDto3 = new ApiCreateItemDto();
        apiCreateItemDto3.setId(3L);
        apiCreateItemDto3.setTzAmount(new BigDecimal("10"));
        items.add(apiCreateItemDto3);
        ApiCreateItemDto apiCreateItemDto4 = new ApiCreateItemDto();
        apiCreateItemDto4.setId(4L);
        apiCreateItemDto4.setTzAmount(new BigDecimal("10"));
        items.add(apiCreateItemDto4);
        for(int i = 1;i<5;i++){
            ApiCreateItemDto apiCreateItemDto5 = new ApiCreateItemDto();
            int randomInt = RandomUtil.randomInt(1, 25);
            apiCreateItemDto5.setId(Long.parseLong(String.valueOf(randomInt)));
            apiCreateItemDto5.setTzAmount(new BigDecimal("10"));
            items.add(apiCreateItemDto5);
            apiCreateDto.setItems(items);
        }
        for(int i = 0;i<=100;i++){
            asyncCjService.create(apiCreateDto);
        }
    }
@@ -181,8 +220,7 @@
    @Override
    @Transactional
    public FebsResponse create(ApiCreateDto apiCreateDto) {
//        Long memberId = LoginUserUtil.getLoginUser().getId();
        Long memberId = 1L;
        Long memberId = LoginUserUtil.getLoginUser().getId();
        //开启下注
        DataDictionaryCustom noTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.NO_TIME.getType(),
@@ -208,13 +246,16 @@
        if(mallMemberWallet.getBalance().compareTo(totalAmount) < 0){
            throw new FebsException("余额不足");
        }
        //更新用户余额
        mallMemberWallet.setBalance(mallMemberWallet.getBalance().subtract(totalAmount));
        mallMemberWalletMapper.updateBalanceWithVersion(mallMemberWallet);
        //新增一条投注主表记录
        CjInfo cjInfo = new CjInfo();
        cjInfo.setMemberId(memberId);
        String kjNo = redisUtils.getString(AppContants.KJ_RECORD_NO);
        cjInfo.setKjNo(kjNo);
        cjInfo.setKjState(1);
        cjInfo.setZjState(1);
        cjInfo.setKjState(0);
        cjInfo.setPerkAmount(BigDecimal.ZERO);
        cjInfo.setTotalAmount(totalAmount);
        cjInfoMapper.insert(cjInfo);
@@ -226,12 +267,12 @@
                throw new FebsException("参数有误,请刷新页面");
            }
            BigDecimal tzAmount = apiCreateItemDto.getTzAmount().setScale(2,BigDecimal.ROUND_DOWN);//投注金额
            totalAmount = totalAmount.add(tzAmount);
            CjItem cjItem = new CjItem();
            cjItem.setInfoId(cjInfo.getId());
            cjItem.setMemberId(memberId);
            cjItem.setTzId(id);
            cjItem.setTzCode(tzInfo.getTzCode());
            cjItem.setTzPercent(tzInfo.getTzPercent());
            cjItem.setType(tzInfo.getType());
            cjItem.setAmount(tzAmount);
            cjItem.setItemNum(tzInfo.getTzCode());
@@ -242,7 +283,7 @@
        String orderNo = MallUtils.getOrderNum("T");
        mallMemberService.addMoneyFlow(
                memberId,
                totalAmount,
                totalAmount.negate(),
                MoneyFlowTypeNewEnum.STATIC_BONUS.getValue(),
                orderNo,
                MoneyFlowTypeNewEnum.STATIC_BONUS.getDescription(),
@@ -256,8 +297,7 @@
    @Override
    public FebsResponse tzInfoList(KjRecordDto kjRecordDto) {
//        Long memberId = LoginUserUtil.getLoginUser().getId();
        Long memberId = 1L;
        Long memberId = LoginUserUtil.getLoginUser().getId();
        kjRecordDto.setMemberId(memberId);
        IPage<CjInfo> page = new Page<>(kjRecordDto.getPageNum(), kjRecordDto.getPageSize());
        IPage<CjInfo> pages = cjInfoMapper.selectTzListByMemberId(page, kjRecordDto);
@@ -278,7 +318,43 @@
    @Override
    public void getOpenPriceMsg(String kjNo, String kjNum) {
        QueryWrapper<CjInfo> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("kj_no",kjNo);
        List<CjInfo> cjInfos = cjInfoMapper.selectList(objectQueryWrapper);
        if(ObjectUtil.isEmpty(cjInfos)){
            return;
        }
        String danshuang = judgeNumberOne(Integer.parseInt(kjNum));
        String daXiao = judgeNumberTwo(Integer.parseInt(kjNum));
        for(CjInfo cjInfo : cjInfos){
            asyncCjService.openPriceAsync(cjInfo,kjNum,danshuang,daXiao);
        }
    }
    /**
     * 取模运算符%来判断该数字是否为偶数。如果余数为0,则该数字为偶数,返回"双数";否则,该数字为奇数,返回"单数"
     * @param num
     * @return 1-单数 2-双数
     */
    public static String judgeNumberOne(int num) {
        if (num % 2 == 0) {
            return "双";
        } else {
            return "单";
        }
    }
    /**
     * 小于等于12为小 大于12为大
     * @param num
     * @return 1-小数 2-大数
     */
    public static String judgeNumberTwo(int num) {
        if (num <= 12) {
            return "小";
        } else {
            return "大";
        }
    }
}