Commit 6532cc5e authored by shiyu's avatar shiyu

重复打卡提交

parent 48ec9854
......@@ -5,6 +5,7 @@ import com.wwdz.ch.core.api.qiandao.QdWxAppletApi;
import com.wwdz.ch.core.api.wxpay.WxPayServiceApi;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.consts.SigninEnum;
import com.wwdz.ch.core.consts.qiandao.SignInTaskEnum;
import com.wwdz.ch.core.consts.qiandao.WxCheckEnum;
......@@ -21,6 +22,8 @@ import com.wwdz.ch.db.dto.request.qiandao.QdUserSignInRequestDto;
import com.wwdz.ch.wx.service.qiandao.QdUserSignInService;
import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -37,6 +40,7 @@ import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service
public class QdUserSignInServiceImpl implements QdUserSignInService {
......@@ -76,6 +80,9 @@ public class QdUserSignInServiceImpl implements QdUserSignInService {
@Autowired
QdSignInRankingDao qdSignInRankingDao;
@Autowired
RedissonClient redissonClient;
@Override
public Result check(QdUserSignInRequestDto dto) {
try {
......@@ -115,9 +122,14 @@ public class QdUserSignInServiceImpl implements QdUserSignInService {
@Transactional
@Override
public Result signIn(QdUserSignInRequestDto dto) {
long userId = dto.getUserId();
String key = "sign_in:" + userId;
RLock lock = redissonClient.getLock(key);
try {
if (!lock.tryLock(3, TimeUnit.SECONDS)) {
return Result.failed("请勿重复提交");
}
Date now = new Date();
long userId = dto.getUserId();
Long taskId = dto.getTaskId() == null ? CommConsts.DEFAULT_TASK_ID : dto.getTaskId();
SignInTask signInTask = signInTaskDao.findById(taskId);
//签到目标天数
......@@ -268,6 +280,10 @@ public class QdUserSignInServiceImpl implements QdUserSignInService {
} catch (Exception e) {
logger.error("乾岛签到失败 error:{}", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
} finally {
if (lock != null && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return Result.failed();
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment