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 320a10ed..0eabe34d 100644 --- a/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java +++ b/src/main/java/com/sqx/modules/discSpinning/controller/DiscSpinningController.java @@ -1,5 +1,6 @@ package com.sqx.modules.discSpinning.controller; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.sqx.common.annotation.Debounce; @@ -20,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; @@ -55,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(discSpinning.getOdds()); 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(); } @@ -70,7 +98,7 @@ public class DiscSpinningController { @PostMapping("/discSpinning/updateDiscSpinning") @ApiOperation("修改大转盘") public Result updateDiscSpinning(@RequestBody DiscSpinning discSpinning) { - List prizes = discSpinningService.list(new QueryWrapper().orderByAsc("type", "id")); + 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) { @@ -105,21 +133,20 @@ public class DiscSpinningController { @GetMapping("/app/discSpinning/selectDiscSpinning") @ApiImplicitParams({ - @ApiImplicitParam(name = "type", value = "`1`普通转盘 `2`任务转盘", dataTypeClass = String.class, paramType = "body"), + @ApiImplicitParam(name = "source", value = "1 普通转盘 2 周任务转盘 3 月任务转盘", dataTypeClass = Integer.class), }) @ApiOperation("查询大转盘") - public Result selectDiscSpinning(@RequestParam(required = false, defaultValue = "1") Integer type) { + public Result selectDiscSpinning(@RequestParam(required = false, defaultValue = "1") Integer source) { return Result.success().put("data", discSpinningService.page(new Page<>(1, 20), - new QueryWrapper().eq("disc_type", type).orderByAsc("disc_type", "odds"))); + new QueryWrapper().eq("disc_type", source).orderByAsc("disc_type", "odds"))); } - //14232 @Login @GetMapping("/app/discSpinning/drawCount") @ApiOperation("获取大转盘抽奖次数") @ApiImplicitParams({ - @ApiImplicitParam(name = "source", value = "`task`任务拉起抽奖 或者 `order` 订单拉起抽奖", dataTypeClass = String.class, paramType = "body"), + @ApiImplicitParam(name = "source", value = "`1` 订单拉起抽奖 `2` 周任务拉起抽奖 `3` 月任务拉起抽奖", dataTypeClass = String.class, paramType = "body"), }) @ApiResponses({ @ApiResponse(code = 200, message = "{\"sum\":\"总抽奖次数\",\"count\":\"剩余抽奖次数\"}"), @@ -128,9 +155,9 @@ public class DiscSpinningController { Map map = new HashMap<>(); int drawCount = Integer.parseInt(commonRepository.findOne(901).getValue()); map.put("sum", drawCount); - if (maps != null && maps.containsKey("source") && "task".equals(maps.get("source"))) { + if (maps != null && maps.containsKey("source") && !"1".equals(maps.get("source"))) { //任务可抽奖次数 - map.put("count", taskCenterService.countTaskDisc(userId)); + map.put("count", taskCenterService.countTaskDisc(userId,maps.get("source").toString())); } else { int i = recordService.countDraw(userId); if (drawCount - i > 0) { @@ -145,28 +172,33 @@ public class DiscSpinningController { @Login @GetMapping("/app/discSpinning/draw") @ApiImplicitParams({ - @ApiImplicitParam(name = "source", value = "`task`任务拉起抽奖 或者 `order` 订单拉起抽奖", dataTypeClass = String.class, paramType = "body"), + @ApiImplicitParam(name = "source", value = "1 普通转盘 2 周任务转盘 3 月任务转盘", dataTypeClass = String.class, paramType = "body"), }) @ApiOperation("抽取大转盘") public Result draw(@ApiIgnore @RequestAttribute("userId") Long userId, @Nullable @ApiIgnore @RequestBody Map maps) { double amount = 0; + int discType = 1; Long orderId = null; Integer i = recordService.countDraw(userId); - if (maps == null || !maps.containsKey("source") || !"task".equals(maps.get("source"))) { + if (maps == null || !maps.containsKey("source") || !"1".equals(maps.get("source"))) { //任务抽奖 int drawCount = Integer.parseInt(commonRepository.findOne(901).getValue()); if (i != null && i >= drawCount) { return Result.error("当日可抽奖次数已超限"); } Orders orders = ordersService.selectOrdersByDay(userId); - amount = orders.getPayMoney().doubleValue(); - orderId = orders.getOrdersId(); if (orders == null) { return Result.error("无可抽奖机会"); } + amount = orders.getPayMoney().doubleValue(); + orderId = orders.getOrdersId(); + } + if (CollectionUtil.isNotEmpty(maps) && maps.containsKey("source")) { + discType = Integer.parseInt(maps.get("source").toString()); + } return new Result().put("data", - discSpinningService.draws(i == null ? 1 : i + 1, amount, orderId, userId, maps == null || maps.get("source") == null ? "order" : maps.get("source").toString())); + discSpinningService.draws(i == null ? 1 : i + 1, amount, orderId, userId, discType)); } @ApiOperation("大转盘奖项领取") diff --git a/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinning.java b/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinning.java index 695eda18..53d217e7 100644 --- a/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinning.java +++ b/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinning.java @@ -21,12 +21,12 @@ public class DiscSpinning extends Model { private String url; //描述 private String name; + //1 普通转盘 2 周任务转盘 3 月任务转盘 + private Integer discType; //类型 1谢谢惠顾 2 红包 9 其它 private Integer type; //数值 private BigDecimal number; - //红包金额比例 - private BigDecimal ratio; //中奖概率 private BigDecimal odds; //创建时间 diff --git a/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java b/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java index 4fcbdf77..b26d7d59 100644 --- a/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java +++ b/src/main/java/com/sqx/modules/discSpinning/entity/DiscSpinningRecord.java @@ -47,7 +47,7 @@ public class DiscSpinningRecord extends Model { } public DiscSpinningRecord(String name, Long orderId, Long userId, Integer type, BigDecimal number, - String drawDay, String createTime, String source) { + String drawDay, String createTime, Integer source) { this.name = name; this.userId = userId; this.orderId = orderId; @@ -55,8 +55,20 @@ public class DiscSpinningRecord extends Model { this.number = number; this.drawDay = drawDay; this.createTime = createTime; - if (StringUtils.isNotBlank(source)) { - this.source = source; + if (source != null) { + switch (source) { + case 1: + this.source = "order"; + break; + case 2: + this.source = "taskW"; + break; + case 3: + this.source = "taskM"; + break; + default: + this.source = source.toString(); + } } } } diff --git a/src/main/java/com/sqx/modules/discSpinning/service/DiscSpinningService.java b/src/main/java/com/sqx/modules/discSpinning/service/DiscSpinningService.java index 03447c41..42bddcbc 100644 --- a/src/main/java/com/sqx/modules/discSpinning/service/DiscSpinningService.java +++ b/src/main/java/com/sqx/modules/discSpinning/service/DiscSpinningService.java @@ -8,7 +8,7 @@ import com.sqx.modules.discSpinning.entity.DiscSpinningRecord; public interface DiscSpinningService extends IService { //抽奖 - DiscSpinningRecord draws(int drawCount, double orderAmount, Long orderId, Long userId, String source); + DiscSpinningRecord draws(int drawCount, double orderAmount, Long orderId, Long userId, Integer source); //领奖 void receiveAsync(DiscSpinningRecord receive); diff --git a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java index eb65407b..cb261368 100644 --- a/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java +++ b/src/main/java/com/sqx/modules/discSpinning/service/impl/DiscSpinningServiceImpl.java @@ -167,9 +167,9 @@ public class DiscSpinningServiceImpl extends ServiceImpl prizes = baseMapper.selectList(new QueryWrapper().eq("disc_type", "order".equals(source) ? 1 : 2).orderByAsc("odds")); + List prizes = baseMapper.selectList(new QueryWrapper().eq("disc_type", source).orderByAsc("odds")); Random random = new Random(); double randomDouble; @@ -212,12 +212,14 @@ public class DiscSpinningServiceImpl extends ServiceImpl { Result taskReceive(Long userId, Long id); - int countTaskDisc(Long userId); + int countTaskDisc(Long userId,String type); } diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java index 6b78bddf..17fe367a 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java @@ -19,6 +19,7 @@ import com.sqx.modules.taskCenter.service.TaskCenterRewardService; import com.sqx.modules.taskCenter.service.TaskCenterService; import com.sqx.modules.userSign.entity.UserSignRecord; import com.sqx.modules.userSign.service.UserSignRecordService; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -70,7 +71,7 @@ public class TaskCenterServiceImpl extends ServiceImpl 0) { s.setButtonTitle("已领取"); s.setNumber(null); - s.setDisabled(false); +// s.setDisabled(false); } else { s.setDiscNumber(0); s.setNumber(null); @@ -226,7 +227,10 @@ public class TaskCenterServiceImpl extends ServiceImpl signWrapper = new QueryWrapper<>(); signWrapper.eq("user_id", userId); @@ -245,16 +249,27 @@ public class TaskCenterServiceImpl extends ServiceImpl 2) { - if (signCount - taskCenter.getNumber().intValue() >= -1 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { - countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); + if ("2".equals(type) && taskCenter.getNumber().intValue() > 1 && taskCenter.getNumber().intValue() < 8) { + if (dayOrderNum > 2) { + if (signCount - taskCenter.getNumber().intValue() >= -1 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { + countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); + } + } else { + if (signCount - taskCenter.getNumber().intValue() >= 0 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { + countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); + } } - } else { - if (signCount - taskCenter.getNumber().intValue() >= 0 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { - countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); + } else if ("3".equals(type) && taskCenter.getNumber().intValue() > 7 && taskCenter.getNumber().intValue() < 32) { + if (dayOrderNum > 2) { + if (signCount - taskCenter.getNumber().intValue() >= -1 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { + countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); + } + } else { + if (signCount - taskCenter.getNumber().intValue() >= 0 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.beginOfMonth(new Date()).toString()) < 1) { + countTaskDisc = countTaskDisc + taskCenter.getDiscNumber(); + } } } - } } }