From ddd3b3d03a00143b109e97bc3484fdb6d18a201e Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Wed, 21 Feb 2024 17:14:39 +0800 Subject: [PATCH] 抽奖 --- src/main/java/cc/mrbird/febs/mall/service/impl/CJServiceImpl.java | 103 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 93 insertions(+), 10 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/CJServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/CJServiceImpl.java index 3df8f3b..6b95791 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/CJServiceImpl.java +++ b/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,41 @@ 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); + + 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); + } } @@ -141,7 +178,16 @@ if(ObjectUtil.isEmpty(kjRecord)){ return; } + DataDictionaryCustom openPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.OPEN_PRICE.getType(), + DataDictionaryEnum.OPEN_PRICE.getCode() + ); int randomInt = RandomUtil.randomInt(1, 25); + if(StrUtil.isNotEmpty(openPriceDic.getValue())){ + randomInt = Integer.parseInt(openPriceDic.getValue()); + openPriceDic.setValue(""); + dataDictionaryCustomMapper.updateById(openPriceDic); + } kjRecord.setKjNum( String.valueOf(randomInt)); kjRecordMapper.updateById(kjRecord); @@ -181,8 +227,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 +253,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 +274,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 +290,7 @@ String orderNo = MallUtils.getOrderNum("T"); mallMemberService.addMoneyFlow( memberId, - totalAmount, + totalAmount.negate(), MoneyFlowTypeNewEnum.STATIC_BONUS.getValue(), orderNo, MoneyFlowTypeNewEnum.STATIC_BONUS.getDescription(), @@ -256,8 +304,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 +325,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 "大"; + } } } -- Gitblit v1.9.1