Skip to content

Commit 10dd03c

Browse files
committed
feat(core): 添加用户每日登录领取coin接口
1 parent 74040d4 commit 10dd03c

File tree

11 files changed

+686
-65
lines changed

11 files changed

+686
-65
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.dhx.apicore.controller;
2+
3+
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4+
import com.dhx.apicommon.common.BaseResponse;
5+
import com.dhx.apicommon.common.exception.BusinessException;
6+
import com.dhx.apicommon.common.exception.ErrorCode;
7+
import com.dhx.apicommon.util.ResultUtil;
8+
import com.dhx.apicore.manager.RedisLockManager;
9+
import com.dhx.apicore.model.DO.DailyCheckIn;
10+
import com.dhx.apicore.model.vo.UserVo;
11+
import com.dhx.apicore.service.DailyCheckInService;
12+
import com.dhx.apicore.service.UserService;
13+
import lombok.extern.slf4j.Slf4j;
14+
import org.apache.commons.lang3.ObjectUtils;
15+
import org.springframework.transaction.annotation.Transactional;
16+
import org.springframework.web.bind.annotation.PostMapping;
17+
import org.springframework.web.bind.annotation.RequestMapping;
18+
import org.springframework.web.bind.annotation.RestController;
19+
20+
import javax.annotation.Resource;
21+
22+
/**
23+
* @Author: QiMu
24+
* @Date: 2023/08/31 11:51:14
25+
* @Version: 1.0
26+
* @Description: 签到接口
27+
*/
28+
@RestController
29+
@RequestMapping("/dailyCheckIn")
30+
@Slf4j
31+
public class DailyCheckInController {
32+
33+
@Resource
34+
private DailyCheckInService dailyCheckInService;
35+
36+
@Resource
37+
private UserService userService;
38+
@Resource
39+
private RedisLockManager redisLockManager;
40+
41+
public static final Long LOGIN_ADD_COIN = 10L;
42+
43+
44+
/**
45+
* 签到
46+
*
47+
* @return {@link BaseResponse}<{@link Boolean}>
48+
*/
49+
@PostMapping("/doCheckIn")
50+
@Transactional(rollbackFor = Exception.class)
51+
public BaseResponse<Boolean> doDailyCheckIn() {
52+
UserVo loginUser = userService.getCurrentUser();
53+
String redissonLock = ("doDailyCheckIn_" + loginUser.getUserAccount()).intern();
54+
return redisLockManager.redissonDistributedLocks(redissonLock, () -> {
55+
LambdaQueryWrapper<DailyCheckIn> dailyCheckInLambdaQueryWrapper = new LambdaQueryWrapper<>();
56+
dailyCheckInLambdaQueryWrapper.eq(DailyCheckIn::getUserId, loginUser.getUserId());
57+
DailyCheckIn dailyCheckIn = dailyCheckInService.getOne(dailyCheckInLambdaQueryWrapper);
58+
if (ObjectUtils.isNotEmpty(dailyCheckIn)) {
59+
throw new BusinessException(ErrorCode.OPERATION_ERROR, "签到失败,今日已签到");
60+
}
61+
dailyCheckIn = new DailyCheckIn();
62+
dailyCheckIn.setUserId(loginUser.getUserId());
63+
dailyCheckIn.setAddCoins(LOGIN_ADD_COIN);
64+
boolean dailyCheckInResult = dailyCheckInService.save(dailyCheckIn);
65+
userService.addLeftCoin(loginUser.getUserId(), dailyCheckIn.getAddCoins());
66+
if (!dailyCheckInResult) {
67+
throw new BusinessException(ErrorCode.OPERATION_ERROR);
68+
}
69+
return ResultUtil.success(true);
70+
}, "签到失败");
71+
}
72+
}

0 commit comments

Comments
 (0)