任务 抽奖 签到
This commit is contained in:
@@ -9,7 +9,5 @@ import java.util.List;
|
||||
@Mapper
|
||||
public interface TaskCenterDao extends BaseMapper<TaskCenter> {
|
||||
|
||||
//大转盘任务
|
||||
List<TaskCenter> queryTaskDiscCenter();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,9 +3,15 @@ package com.sqx.modules.taskCenter.dao;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.sqx.modules.taskCenter.entity.TaskCenterReward;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Mapper
|
||||
public interface TaskCenterRewardDao extends BaseMapper<TaskCenterReward> {
|
||||
|
||||
@Select("SELECT type,number FROM `task_center_reward` where task_id = #{taskId}")
|
||||
Map<Integer, Integer> getRewardMap(Long taskId);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -25,8 +25,10 @@ public class TaskCenterRecord extends Model<TaskCenterRecord> {
|
||||
private Long id;
|
||||
@ApiModelProperty("用户id")
|
||||
private Long userId;
|
||||
@ApiModelProperty("任务Id")
|
||||
@ApiModelProperty("任务Id 周任务转盘奖励时 该值为 user_sign_record的id")
|
||||
private Long taskId;
|
||||
@ApiModelProperty("来源Id 目前仅周任务使用")
|
||||
private Long sourceId;
|
||||
@ApiModelProperty("奖励名称")
|
||||
private String name;
|
||||
@ApiModelProperty("奖励类型 1 金币 2 现金 3 4 5 9转盘")
|
||||
|
||||
@@ -7,5 +7,6 @@ import java.util.Map;
|
||||
|
||||
public interface TaskCenterRewardService extends IService<TaskCenterReward> {
|
||||
|
||||
Map<Integer, Integer> getRewardMap(Long taskId);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,10 +8,13 @@ import java.util.Map;
|
||||
|
||||
public interface TaskCenterService extends IService<TaskCenter> {
|
||||
|
||||
//查询任务中心
|
||||
Result queryTaskCenter(Long userId);
|
||||
|
||||
//任务领取
|
||||
Result taskReceive(Long userId, Long id);
|
||||
|
||||
//获取大转盘抽奖次数
|
||||
int countTaskDisc(Long userId,String type);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,5 +15,9 @@ import java.util.Map;
|
||||
public class TaskCenterRewardServiceImpl extends ServiceImpl<TaskCenterRewardDao, TaskCenterReward> implements TaskCenterRewardService {
|
||||
|
||||
|
||||
@Override
|
||||
public Map<Integer, Integer> getRewardMap(Long taskId) {
|
||||
return baseMapper.getRewardMap(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,21 @@
|
||||
package com.sqx.modules.taskCenter.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.sqx.common.utils.DateUtils;
|
||||
import com.sqx.common.utils.RedisKeys;
|
||||
import com.sqx.common.utils.RedisUtils;
|
||||
import com.sqx.common.utils.Result;
|
||||
import com.sqx.modules.app.entity.UserEntity;
|
||||
import com.sqx.modules.app.entity.UserMoneyDetails;
|
||||
import com.sqx.modules.app.service.UserMoneyDetailsService;
|
||||
import com.sqx.modules.app.service.UserMoneyService;
|
||||
import com.sqx.modules.app.service.UserService;
|
||||
import com.sqx.modules.discSpinning.service.DiscSpinningRecordService;
|
||||
import com.sqx.modules.orders.service.OrdersService;
|
||||
import com.sqx.modules.taskCenter.dao.TaskCenterDao;
|
||||
import com.sqx.modules.taskCenter.entity.TaskCenter;
|
||||
@@ -25,9 +32,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
public class TaskCenterServiceImpl extends ServiceImpl<TaskCenterDao, TaskCenter> implements TaskCenterService {
|
||||
@@ -44,62 +49,89 @@ public class TaskCenterServiceImpl extends ServiceImpl<TaskCenterDao, TaskCenter
|
||||
private UserMoneyService userMoneyService;
|
||||
@Autowired
|
||||
private UserMoneyDetailsService userMoneyDetailsService;
|
||||
@Autowired
|
||||
private DiscSpinningRecordService discSpinningRecordService;
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private RedisUtils redisUtils;
|
||||
|
||||
|
||||
@Override
|
||||
public Result queryTaskCenter(Long userId) {
|
||||
//任务
|
||||
List<TaskCenter> taskPage = baseMapper.selectList(new QueryWrapper<TaskCenter>().eq("shows", 1).orderByAsc("sort", "type"));
|
||||
List<TaskCenter> resultTask = new ArrayList<>();
|
||||
boolean todaySign = true;
|
||||
//月 签到记录
|
||||
QueryWrapper<UserSignRecord> signWrapper = new QueryWrapper<>();
|
||||
signWrapper.eq("user_id", userId);
|
||||
signWrapper.gt("sign_day", DateUtil.format(new Date(), "yyyy-MM") + "-00");
|
||||
signWrapper.orderByAsc("create_time");
|
||||
int signCount = signRecordService.count(signWrapper);
|
||||
TaskCenter reTaskCenter = null;
|
||||
Integer signCount = null;
|
||||
for (TaskCenter s : taskPage) {
|
||||
Map<Integer, Integer> rewardMap = taskCenterRewardService.getRewardMap(s.getId());
|
||||
if (CollectionUtil.isEmpty(rewardMap)) {
|
||||
continue;
|
||||
}
|
||||
switch (s.getType()) {
|
||||
//签到任务
|
||||
case 2:
|
||||
//日任务
|
||||
if (s.getNumber().equals(1)) {
|
||||
Integer dayOrderNum = ordersService.countOrderNum(userId, DateUtil.today() + " 00:00:00");
|
||||
if (dayOrderNum < 3) {
|
||||
s.setDiscNumber(dayOrderNum);
|
||||
s.setNumber(3);
|
||||
// s.setDisabled(false);
|
||||
todaySign = false;
|
||||
} else if (recordService.countTaskNum(userId, s.getId(), DateUtil.today() + " 00:00:00") > 0) {
|
||||
s.setButtonTitle("已领取");
|
||||
s.setNumber(null);
|
||||
// s.setDisabled(false);
|
||||
} else {
|
||||
s.setDiscNumber(0);
|
||||
s.setNumber(null);
|
||||
s.setJumpType(0);
|
||||
}
|
||||
} else {
|
||||
if (todaySign) {
|
||||
if ((signCount < (s.getNumber().intValue() - 1))) {
|
||||
s.setDiscNumber(signCount);
|
||||
s.setNumber(null);
|
||||
s.setDisabled(false);
|
||||
} else if (recordService.countTaskNum(userId, s.getId(), DateUtil.beginOfMonth(new Date()).toString()) > 0) {
|
||||
s.setButtonTitle("已领取");
|
||||
s.setDisabled(false);
|
||||
s.setNumber(null);
|
||||
//周任务
|
||||
if (s.getNumber() > 1 && s.getNumber() < 8) {
|
||||
if (rewardMap.containsKey(9)) {
|
||||
//抽奖次数
|
||||
Map<Integer, Integer> taskWCount = signRecordService.getTaskWCount(userId, rewardMap.get(9));
|
||||
if (CollectionUtil.isNotEmpty(taskWCount)) {
|
||||
for (Integer value : taskWCount.values()) {
|
||||
if (value > 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((signCount < s.getNumber().intValue())) {
|
||||
s.setDiscNumber(signCount);
|
||||
Integer wSignCount = signRecordService.getWSignCount(userId);
|
||||
if (wSignCount == null || wSignCount + (todaySign ? 1 : 0) < s.getNumber()) {
|
||||
s.setDiscNumber(wSignCount == null ? 0 : wSignCount);
|
||||
s.setDisabled(false);
|
||||
s.setNumber(null);
|
||||
} else if (recordService.countTaskNum(userId, s.getId(), DateUtil.beginOfMonth(new Date()).toString()) > 0) {
|
||||
} else {
|
||||
s.setButtonTitle("已领取");
|
||||
s.setDisabled(false);
|
||||
s.setNumber(null);
|
||||
}
|
||||
}
|
||||
|
||||
//月任务
|
||||
else if (s.getNumber() > 7 && s.getNumber() < 32) {
|
||||
if (signCount == null) {
|
||||
signCount = signRecordService.getUserSignCount(userId);
|
||||
}
|
||||
if (signCount + (todaySign ? 1 : 0) < s.getNumber()) {
|
||||
s.setDiscNumber(signCount);
|
||||
s.setDisabled(false);
|
||||
} else {
|
||||
if (rewardMap.containsKey(9)) {
|
||||
Integer spinningCount = discSpinningRecordService.countSourceRecord(s.getId());
|
||||
if (spinningCount == null || spinningCount > 0) {
|
||||
break;
|
||||
} else {
|
||||
s.setButtonTitle("已领取");
|
||||
s.setDisabled(false);
|
||||
s.setNumber(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
//一次性任务
|
||||
@@ -110,32 +142,29 @@ public class TaskCenterServiceImpl extends ServiceImpl<TaskCenterDao, TaskCenter
|
||||
s.setDiscNumber(sumOrderNum);
|
||||
s.setNumber(s.getNumber());
|
||||
} else if (recordService.countTaskNum(userId, s.getId(), null) > 0) {
|
||||
reTaskCenter = s;
|
||||
continue;
|
||||
} else {
|
||||
s.setDiscNumber(0);
|
||||
s.setNumber(null);
|
||||
s.setJumpType(0);
|
||||
}
|
||||
} else if (s.getDetail().contains("绑定支付宝")) {
|
||||
UserEntity userInfo = userService.queryByUserId(userId);
|
||||
if (StringUtils.isNotBlank(userInfo.getZhiFuBao()) && StringUtils.isNotBlank(userInfo.getZhiFuBaoName())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
resultTask.add(s);
|
||||
}
|
||||
if (reTaskCenter != null) {
|
||||
taskPage.remove(reTaskCenter);
|
||||
}
|
||||
return Result.success().put("data", taskPage);
|
||||
return Result.success().put("data", resultTask);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Result taskReceive(Long userId, Long id) {
|
||||
TaskCenter taskCenter = baseMapper.selectById(id);
|
||||
//月 签到记录
|
||||
QueryWrapper<UserSignRecord> signWrapper = new QueryWrapper<>();
|
||||
signWrapper.eq("user_id", userId);
|
||||
signWrapper.gt("sign_day", DateUtil.format(new Date(), "yyyy-MM") + "-00");
|
||||
signWrapper.orderByAsc("create_time");
|
||||
int signCount = signRecordService.count(signWrapper);
|
||||
|
||||
if (taskCenter.getType().equals(2)) {
|
||||
Integer dayOrderNum = ordersService.countOrderNum(userId, DateUtil.today() + " 00:00:00");
|
||||
@@ -143,7 +172,7 @@ public class TaskCenterServiceImpl extends ServiceImpl<TaskCenterDao, TaskCenter
|
||||
UserSignRecord yesterday = signRecordService.getOne(new QueryWrapper<UserSignRecord>().eq("user_id", userId).eq("sign_day",
|
||||
DateUtil.format(DateUtil.yesterday(), "yyyy-MM-dd")));
|
||||
UserSignRecord signRecord = new UserSignRecord();
|
||||
if (yesterday != null && yesterday.getDay() != null) {
|
||||
if (yesterday != null && yesterday.getDay() != null && yesterday.getDay() != 7) {
|
||||
signRecord.setDay(yesterday.getDay() + 1);
|
||||
} else {
|
||||
signRecord.setDay(1);
|
||||
@@ -158,22 +187,6 @@ public class TaskCenterServiceImpl extends ServiceImpl<TaskCenterDao, TaskCenter
|
||||
return Result.error("不可重复领取");
|
||||
}
|
||||
signRecordService.save(signRecord);
|
||||
} else {
|
||||
if (dayOrderNum > 2) {
|
||||
if (signCount < (taskCenter.getNumber().intValue() - 1)) {
|
||||
return Result.error("领取失败,未达成领取条件");
|
||||
}
|
||||
if (recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.today() + " 00:00:00") > 0) {
|
||||
return Result.error("不可重复领取");
|
||||
}
|
||||
} else {
|
||||
if (signCount < taskCenter.getNumber().intValue()) {
|
||||
return Result.error("领取失败,未达成领取条件");
|
||||
}
|
||||
if (recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.today() + " 00:00:00") > 0) {
|
||||
return Result.error("不可重复领取");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (taskCenter.getType().equals(3) && taskCenter.getId().equals(1L)) {
|
||||
Integer sumOrderNum = ordersService.countOrderNum(userId, null);
|
||||
@@ -228,49 +241,59 @@ public class TaskCenterServiceImpl extends ServiceImpl<TaskCenterDao, TaskCenter
|
||||
|
||||
@Override
|
||||
public int countTaskDisc(Long userId, String type) {
|
||||
int countTaskDisc = 0;
|
||||
Integer signCount = null;
|
||||
if (StringUtils.isBlank(type) || "1".equals(type)) {
|
||||
return 0;
|
||||
}
|
||||
//月 签到记录
|
||||
QueryWrapper<UserSignRecord> signWrapper = new QueryWrapper<>();
|
||||
signWrapper.eq("user_id", userId);
|
||||
signWrapper.gt("sign_day", DateUtil.format(new Date(), "yyyy-MM") + "-00");
|
||||
signWrapper.orderByAsc("create_time");
|
||||
int signCount = signRecordService.count(signWrapper);
|
||||
|
||||
//TaskCenter的number为大转盘次数
|
||||
List<TaskCenter> taskCenters = baseMapper.queryTaskDiscCenter();
|
||||
int countTaskDisc = 0;
|
||||
Integer dayOrderNum = ordersService.countOrderNum(userId, DateUtil.today() + " 00:00:00");
|
||||
QueryWrapper<TaskCenter> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("type", 2);
|
||||
if ("2".equals(type)) {
|
||||
queryWrapper.gt("number", 1);
|
||||
queryWrapper.lt("number", 8);
|
||||
} else if ("3".equals(type)) {
|
||||
queryWrapper.gt("number", 7);
|
||||
queryWrapper.lt("number", 32);
|
||||
}
|
||||
List<TaskCenter> taskCenters = baseMapper.selectList(queryWrapper);
|
||||
for (TaskCenter taskCenter : taskCenters) {
|
||||
if (taskCenter.getType().equals(2)) {
|
||||
if (taskCenter.getNumber().equals(1)) {
|
||||
if (dayOrderNum > 2 && recordService.countTaskNum(userId, taskCenter.getId(), DateUtil.today() + " 00:00:00") < 1) {
|
||||
countTaskDisc = countTaskDisc + taskCenter.getDiscNumber();
|
||||
}
|
||||
} else {
|
||||
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 ("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();
|
||||
}
|
||||
Map<Integer, Integer> rewardMap = taskCenterRewardService.getRewardMap(taskCenter.getId());
|
||||
if (CollectionUtil.isEmpty(rewardMap)) {
|
||||
continue;
|
||||
}
|
||||
Map<Integer, Integer> taskWRedisMap = new HashMap<>();
|
||||
if ("2".equals(type)) {
|
||||
//抽奖次数
|
||||
Map<Integer, Integer> taskWCount = signRecordService.getTaskWCount(userId, rewardMap.get(9));
|
||||
if (CollectionUtil.isNotEmpty(taskWCount)) {
|
||||
for (Map.Entry<Integer, Integer> entry : taskWCount.entrySet()) {
|
||||
Integer key = entry.getKey();
|
||||
Integer value = entry.getValue();
|
||||
if (value > 0) {
|
||||
countTaskDisc = countTaskDisc + value;
|
||||
taskWRedisMap.put(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(taskWRedisMap)) {
|
||||
redisUtils.set(RedisKeys.getDateKey("spinning:amount:taskW") + userId, taskWRedisMap, DateUtils.todayAfterSecond());
|
||||
}
|
||||
} else if ("3".equals(type)) {
|
||||
if (signCount == null) {
|
||||
signCount = signRecordService.getUserSignCount(userId);
|
||||
}
|
||||
if (signCount >= taskCenter.getNumber()) {
|
||||
if (rewardMap.containsKey(9)) {
|
||||
Integer spinningCount = discSpinningRecordService.countSourceRecord(taskCenter.getId());
|
||||
countTaskDisc = countTaskDisc + (spinningCount == null ? 0 : spinningCount);
|
||||
if (countTaskDisc > 0) {
|
||||
taskWRedisMap.put(taskCenter.getId().intValue(), countTaskDisc);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(taskWRedisMap)) {
|
||||
redisUtils.set(RedisKeys.getDateKey("spinning:amount:taskM") + userId, taskWRedisMap, DateUtils.todayAfterSecond());
|
||||
}
|
||||
}
|
||||
}
|
||||
return countTaskDisc;
|
||||
|
||||
Reference in New Issue
Block a user