From d6ac80cd1e2fec6223f69d13bb87c82b1b453f40 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Sat, 21 Dec 2024 09:59:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E8=BD=AC=E7=9B=98=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DiscSpinningController.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java index e4c35c49..a7721a46 100644 --- a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java +++ b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java @@ -21,6 +21,7 @@ import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import reactor.util.annotation.Nullable; import springfox.documentation.annotations.ApiIgnore; @@ -56,9 +57,35 @@ public class DiscSpinningController { @PostMapping("/discSpinning/insertDiscSpinning") @ApiOperation("添加大转盘") + @Transactional public Result insertDiscSpinning(@RequestBody DiscSpinning discSpinning) { discSpinning.setCreateTime(DateUtils.format(new Date())); + discSpinning.setNumber(BigDecimal.ZERO); discSpinningService.save(discSpinning); + + List prizes = discSpinningService.list(new QueryWrapper().eq("disc_type",discSpinning.getDiscType()).orderByAsc("type", "id")); + BigDecimal number = BigDecimal.ZERO; + List prizesResult = new ArrayList<>(); + for (DiscSpinning prize : prizes) { + if (discSpinning.getId().equals(prize.getId())) { + number = prize.getNumber().add(discSpinning.getOdds().subtract(prize.getOdds())); + discSpinning.setNumber(number); + prize.setOdds(discSpinning.getOdds()); + prizesResult.add(discSpinning); + } else if (number.compareTo(BigDecimal.ZERO) > 0) { + number = number.add(prize.getOdds()); + prize.setNumber(number); + prizesResult.add(prize); + } + } + BigDecimal totalOdds = prizes.stream() + .map(DiscSpinning::getOdds) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + if (totalOdds.compareTo(new BigDecimal(100)) > 0) { + return Result.error("中奖概率总和 不可超过100"); + } + discSpinningService.updateBatchById(prizesResult); return Result.success(); }