大转盘 领取奖励修改
提现 修改 任务中心 记录 领取记录 是否可领取
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package com.sqx.modules.discSpinning.controller;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.google.common.util.concurrent.RateLimiter;
|
||||
import com.sqx.common.utils.DateUtils;
|
||||
import com.sqx.common.utils.Result;
|
||||
import com.sqx.modules.app.annotation.Login;
|
||||
@@ -23,6 +25,7 @@ import com.sqx.modules.pay.entity.CashOut;
|
||||
import com.sqx.modules.pay.service.CashOutService;
|
||||
import com.sqx.modules.pay.wuyou.BaseResp;
|
||||
import com.sqx.modules.pay.wuyou.WuyouPay;
|
||||
import com.sqx.modules.taskCenter.service.TaskCenterService;
|
||||
import com.sqx.modules.utils.AliPayOrderUtil;
|
||||
import io.swagger.annotations.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -38,6 +41,7 @@ import java.math.RoundingMode;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@@ -53,11 +57,19 @@ public class DiscSpinningController {
|
||||
private final UserMoneyDetailsService userMoneyDetailsService;
|
||||
private final UserService userService;
|
||||
private final CashOutService cashOutService;
|
||||
private final TaskCenterService taskCenterService;
|
||||
|
||||
// 以id为键,对应的RateLimiter实例为值,用于不同id的防抖控制
|
||||
private static final ConcurrentHashMap<Long, RateLimiter> rateLimiterMap = new ConcurrentHashMap<>();
|
||||
|
||||
|
||||
@Autowired
|
||||
public DiscSpinningController(CommonInfoService commonRepository, DiscSpinningService discSpinningService,
|
||||
UserMoneyDetailsService userMoneyDetailsService, CashOutService cashOutService,
|
||||
OrdersService ordersService, DiscSpinningRecordService recordService, UserMoneyService userMoneyService, UserService userService) {
|
||||
OrdersService ordersService, DiscSpinningRecordService recordService,
|
||||
UserMoneyService userMoneyService, UserService userService,
|
||||
TaskCenterService taskCenterService
|
||||
) {
|
||||
this.commonRepository = commonRepository;
|
||||
this.discSpinningService = discSpinningService;
|
||||
this.ordersService = ordersService;
|
||||
@@ -66,6 +78,7 @@ public class DiscSpinningController {
|
||||
this.userMoneyDetailsService = userMoneyDetailsService;
|
||||
this.userService = userService;
|
||||
this.cashOutService = cashOutService;
|
||||
this.taskCenterService = taskCenterService;
|
||||
|
||||
}
|
||||
|
||||
@@ -144,7 +157,7 @@ public class DiscSpinningController {
|
||||
map.put("sum", drawCount);
|
||||
if (maps != null && maps.containsKey("source") && "task".equals(maps.get("source"))) {
|
||||
//任务可抽奖次数
|
||||
|
||||
map.put("count", taskCenterService.countTaskDisc(userId));
|
||||
} else {
|
||||
int i = recordService.countDraw(userId);
|
||||
if (drawCount - i > 0) {
|
||||
@@ -186,87 +199,74 @@ public class DiscSpinningController {
|
||||
@PostMapping("/app/discSpinning/receive")
|
||||
@ApiOperation("大转盘奖项领取")
|
||||
public Result receive(@RequestBody DiscSpinningRecord receive) {
|
||||
CompletableFuture.runAsync(() -> {
|
||||
receiveAsync(receive);
|
||||
});
|
||||
return Result.success();
|
||||
// 每秒允许0.6次操作
|
||||
RateLimiter rateLimiter = rateLimiterMap.computeIfAbsent(receive.getId(), k -> RateLimiter.create(0.6));
|
||||
if (rateLimiter.tryAcquire()) {
|
||||
CompletableFuture.runAsync(() -> {
|
||||
DiscSpinningRecord record = recordService.getById(receive.getId());
|
||||
CompletableFuture.runAsync(() -> {
|
||||
receiveAsync(record);
|
||||
});
|
||||
});
|
||||
return Result.success();
|
||||
}
|
||||
return Result.error("操作过于频繁,请稍后再试");
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void receiveAsync(DiscSpinningRecord receive) {
|
||||
UserEntity userInfo = userService.queryByUserId(receive.getUserId());
|
||||
if (receive.getNumber().compareTo(new BigDecimal("0.1")) > 0 && StringUtils.isNotBlank(userInfo.getZhiFuBao()) && StringUtils.isNotBlank(userInfo.getZhiFuBaoName())) {
|
||||
receive.setTarget("1");
|
||||
//提现
|
||||
String result = withdraw(receive, receive.getUserId(), receive.getNumber().doubleValue());
|
||||
recordService.updateById(receive);
|
||||
|
||||
if (StringUtils.isBlank(result)) {
|
||||
// return Result.success();
|
||||
return;
|
||||
}
|
||||
|
||||
if ("提现成功,将在三个工作日内到账,请耐心等待!".equals(result)) {
|
||||
// return Result.success(result);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
|
||||
userMoneyDetails.setClassify(5);
|
||||
userMoneyDetails.setMoney(receive.getNumber());
|
||||
userMoneyDetails.setUserId(receive.getUserId());
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
userMoneyDetails.setCreateTime(simpleDateFormat.format(new Date()));
|
||||
userMoneyDetails.setContent("现金红包奖励" + receive.getNumber() + "元");
|
||||
userMoneyDetails.setTitle("[现金大转盘]");
|
||||
userMoneyDetails.setState(2);
|
||||
userMoneyDetails.setType(1);
|
||||
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
||||
receive.getUserId(),null,null,"[现金大转盘]",5,1,2,
|
||||
receive.getNumber(),"现金红包奖励" + receive.getNumber() + "元");
|
||||
userMoneyDetailsService.save(userMoneyDetails);
|
||||
receive.setTarget("2");
|
||||
receive.setTargetId(userMoneyDetails.getId());
|
||||
recordService.updateById(receive);
|
||||
//存入余额 钱
|
||||
userMoneyService.updateAmount(1, receive.getUserId(), receive.getNumber().doubleValue());
|
||||
receive.setTarget("2");
|
||||
userMoneyDetailsService.save(userMoneyDetails);
|
||||
receive.setTargetId(userMoneyDetails.getId());
|
||||
|
||||
recordService.updateById(receive);
|
||||
if (receive.getNumber().compareTo(new BigDecimal("0.1")) > 0 && StringUtils.isNotBlank(userInfo.getZhiFuBao()) && StringUtils.isNotBlank(userInfo.getZhiFuBaoName())) {
|
||||
//提现
|
||||
withdraw(userInfo, receive.getNumber().doubleValue());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public String withdraw(DiscSpinningRecord record, Long userId, Double money) {
|
||||
UserEntity userInfo = userService.queryByUserId(userId);
|
||||
//最高提现金额
|
||||
CommonInfo one2 = commonRepository.findOne(910);
|
||||
public void withdraw(UserEntity userInfo, Double money) {
|
||||
CashOut cashOut = new CashOut();
|
||||
cashOut.setIsOut(false);
|
||||
cashOut.setMoney(money.toString());
|
||||
cashOut.setUserId(userInfo.getUserId());
|
||||
cashOut.setZhifubao(userInfo.getZhiFuBao());
|
||||
cashOut.setZhifubaoName(userInfo.getZhiFuBaoName());
|
||||
|
||||
cashOut.setState(0);
|
||||
cashOut.setRate(0.00);
|
||||
cashOut.setUserType(1);
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
String date = sdf.format(new Date());
|
||||
cashOut.setCreateAt(date);
|
||||
if (one2 != null && money >= Double.parseDouble(one2.getValue())) {
|
||||
cashOutService.saveBody(cashOut);
|
||||
return "提现成功,将在三个工作日内到账,请耐心等待!";
|
||||
}
|
||||
cashOut.setCreateAt(DateUtil.now());
|
||||
|
||||
String outOrderNo = AliPayOrderUtil.createOrderId();
|
||||
cashOut.setOrderNumber(outOrderNo);
|
||||
BaseResp baseResp = WuyouPay.extractOrder(outOrderNo, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName());
|
||||
if (baseResp.getStatus() != null && baseResp.getStatus().equals(2)) {
|
||||
cashOut.setState(1);
|
||||
} else if (StringUtils.isNotBlank(baseResp.getErrorMsg())) {
|
||||
return baseResp.getErrorMsg();
|
||||
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
||||
userInfo.getUserId(),null,null,"[现金大转盘]",4,2,1,
|
||||
new BigDecimal(money),"现金红包自动提现" + money + "元");
|
||||
userMoneyDetailsService.save(userMoneyDetails);
|
||||
//减去余额 钱
|
||||
userMoneyService.updateAmount(2, userInfo.getUserId(), money);
|
||||
|
||||
//最高提现金额
|
||||
CommonInfo one2 = commonRepository.findOne(910);
|
||||
if (one2 == null || money <= Double.parseDouble(one2.getValue())) {
|
||||
String outOrderNo = AliPayOrderUtil.createOrderId();
|
||||
cashOut.setOrderNumber(outOrderNo);
|
||||
BaseResp baseResp = WuyouPay.extractOrder(outOrderNo, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName());
|
||||
if (baseResp.getStatus() != null && baseResp.getStatus().equals(2)) {
|
||||
cashOut.setState(1);
|
||||
} else if (StringUtils.isNotBlank(baseResp.getErrorMsg())) {
|
||||
cashOut.setState(2);
|
||||
cashOut.setRefund(baseResp.getErrorMsg());
|
||||
}
|
||||
}
|
||||
cashOutService.saveBody(cashOut);
|
||||
record.setTargetId(cashOut.getId());
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
@Transactional
|
||||
|
||||
Reference in New Issue
Block a user