From 0dded054a1744e032c30bc5b10fda1f2c94a4099 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Wed, 21 Feb 2024 15:20:48 +0800 Subject: [PATCH] 抽奖 --- src/main/java/cc/mrbird/febs/mall/service/impl/CJServiceImpl.java | 96 +++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 86 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..4b8b87d 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,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 "大"; + } } } -- Gitblit v1.9.1