Browse Source

每月任务

release
张彭杰 1 month ago
parent
commit
26616ba9ca
8 changed files with 128 additions and 29 deletions
  1. 6
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/utc/user/response/UserGetUserSubTaskCompleteVo.java
  2. 84
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/utc/UserTaskCompleteEventHandler.java
  3. 5
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/utc/CompleteUserTaskCompleteDomainService.java
  4. 9
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/tasktemplate/impl/TaskTemplateQueryServiceImpl.java
  5. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/UserDailyTaskProgressQueryService.java
  6. 9
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/impl/UserDailyTaskProgressQueryServiceImpl.java
  7. 1
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/UserTaskCompleteQueryService.java
  8. 41
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/impl/UserTaskCompleteQueryServiceImpl.java

6
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/utc/user/response/UserGetUserSubTaskCompleteVo.java

@ -26,11 +26,7 @@ public class UserGetUserSubTaskCompleteVo {
private Integer completeCount;
@ApiModelProperty("完成状态")
private Boolean completeStatus;
@ApiModelProperty("完成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime completeTime;
private Boolean completeStatus = false;
@ApiModelProperty("排序")
private Integer sort;

84
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/utc/UserTaskCompleteEventHandler.java

@ -17,6 +17,7 @@ import com.qniao.dam.domian.aggregate.tasktemplate.constant.SubTaskTypeEnum;
import com.qniao.dam.domian.aggregate.tasktemplate.constant.TaskGroupEnum;
import com.qniao.dam.domian.aggregate.tasktemplate.constant.TaskStageEnum;
import com.qniao.dam.domian.aggregate.tasktemplate.constant.TaskTypeEnum;
import com.qniao.dam.domian.aggregate.udtp.event.UserDailyTaskProgressCommittedEvent;
import com.qniao.dam.domian.aggregate.utc.event.EffectiveBlindDateCountCommittedMQ;
import com.qniao.dam.domian.aggregate.utc.event.UserEffectiveLiveDurationCommittedMQ;
import com.qniao.dam.domian.aggregate.utc.event.UserLiveRoomCheckInUserCountCommittedMQ;
@ -115,13 +116,13 @@ public class UserTaskCompleteEventHandler extends BaseApplicationService {
}
}
private void commitDailyTaskTaskComplete(Long userId,
SubTaskTypeEnum subTaskType,
Integer commitCount) {
private void commitDailyTaskTaskComplete2(Long userId,
SubTaskTypeEnum subTaskType,
Integer commitCount) {
LiveMatchmaker liveMatchmaker = liveMatchmakerQueryService.queryByUserId(userId);
if (Objects.nonNull(liveMatchmaker)) {
Tuple tuple = taskTemplateQueryService.getTaskDate(TaskTypeEnum.DAILY_TASK, liveMatchmaker.getCreateTime());
UserTaskComplete userTaskComplete = userTaskCompleteQueryService.queryBy(userId, tuple.get(0), tuple.get(1));
UserTaskComplete userTaskComplete = userTaskCompleteQueryService.queryBy(userId, null, tuple.get(0), tuple.get(1));
TaskTemplate taskTemplate = null;
if (Objects.isNull(userTaskComplete)) {
TaskGroupEnum taskGroup = liveMatchmakerQueryService.getTaskGroup(liveMatchmaker);
@ -169,9 +170,9 @@ public class UserTaskCompleteEventHandler extends BaseApplicationService {
}
}
private void commitDailyTaskTaskComplete2(Long userId,
SubTaskTypeEnum subTaskType,
Integer commitCount) {
private void commitDailyTaskTaskComplete(Long userId,
SubTaskTypeEnum subTaskType,
Integer commitCount) {
LiveMatchmaker liveMatchmaker = liveMatchmakerQueryService.queryByUserId(userId);
if (Objects.nonNull(liveMatchmaker)) {
UserDailyTaskProgress progress = userDailyTaskProgressQueryService.queryBy(userId, LocalDate.now(), subTaskType);
@ -184,6 +185,75 @@ public class UserTaskCompleteEventHandler extends BaseApplicationService {
}
}
/**
*
*/
@Subscribe
private void handle(UserDailyTaskProgressCommittedEvent event) {
try {
synchronized (event.getUserId().toString().intern()) {
LiveMatchmaker liveMatchmaker = liveMatchmakerQueryService.queryByUserId(event.getUserId());
if (Objects.nonNull(liveMatchmaker)) {
//每日任务处理
TaskGroupEnum taskGroup = liveMatchmakerQueryService.getTaskGroup(liveMatchmaker);
TaskStageEnum stageCode = TaskStageEnum.count(liveMatchmaker.getCreateTime().toLocalDate());
handleTaskComplete(event.getUserId(), liveMatchmaker, TaskTypeEnum.DAILY_TASK, taskGroup, stageCode);
//每月任务处理
handleTaskComplete(event.getUserId(), liveMatchmaker, TaskTypeEnum.MONTHLY_TASK, taskGroup, stageCode);
}
}
} catch (Exception e) {
log.error("用户任务提交进度处理异常", e);
}
}
private void handleTaskComplete(Long userId,
LiveMatchmaker liveMatchmaker,
TaskTypeEnum taskType,
TaskGroupEnum taskGroup,
TaskStageEnum stageCode) {
//查询任务模板
TaskTemplate taskTemplate = taskTemplateQueryService.queryBy(taskGroup, taskType, stageCode);
if (Objects.nonNull(taskTemplate)) {
Tuple tuple = taskTemplateQueryService.getTaskDate(taskType, liveMatchmaker.getCreateTime());
UserTaskComplete userTaskComplete = userTaskCompleteQueryService.queryBy(userId, taskTemplate.getId(), tuple.get(0), tuple.get(1));
if (Objects.isNull(userTaskComplete)) {
userTaskComplete = UserTaskComplete.init(userId, taskTemplate.getId(), tuple.get(0), tuple.get(1));
}
//未完成
if (!userTaskComplete.getCompleteStatus()) {
List<SubTaskTemplate> subTaskTemplateList = taskTemplateQueryService.getSubList(userTaskComplete.getTaskTemplateId());
if (CollUtil.isNotEmpty(subTaskTemplateList)) {
boolean completeStatus = true;
for (SubTaskTemplate subTaskTemplate : subTaskTemplateList) {
int completeCount = userDailyTaskProgressQueryService.count(userId, subTaskTemplate.getSubTaskType(), tuple.get(0), tuple.get(1));
if (completeCount < subTaskTemplate.getRequiredCount()) {
completeStatus = false;
break;
}
}
if (completeStatus) {
//已完成
BigDecimal revenue = new BigDecimal(taskTemplate.getRewardValue());
WalletAccount walletAccount = null;
if (revenue.compareTo(BigDecimal.ZERO) > 0) {
walletAccount = walletAccountQueryService.queryByType(userTaskComplete.getUserId(), IdentityTypeEnum.INDIVIDUAL);
BigDecimal originalBalance = walletAccount.getTotalBalance();
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue));
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance()));
WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(TradeTypeEnum.TASK_REWARD, revenue, true, originalBalance, walletAccount.getTotalBalance());
walletAccount.setRecordList(Collections.singletonList(walletAccountRecord));
}
completeUserTaskCompleteDomainService.handle(userTaskComplete, walletAccount);
} else {
//未完成
userTaskCompleteAggregate.edit(userTaskComplete);
}
}
}
}
}
@Subscribe
private void handle(UserTaskCompleteCommittedEvent event) {
try {

5
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/utc/CompleteUserTaskCompleteDomainService.java

@ -10,6 +10,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Objects;
@Service
public class CompleteUserTaskCompleteDomainService {
@ -27,6 +28,8 @@ public class CompleteUserTaskCompleteDomainService {
userTaskComplete.setRewardReceiveStatus(UserTaskCompleteRewardReceiveStatusEnum.RECEIVED);
userTaskCompleteAggregate.edit(userTaskComplete);
walletAccountAggregate.save(walletAccount);
if (Objects.nonNull(walletAccount)) {
walletAccountAggregate.save(walletAccount);
}
}
}

9
dating-agency-mall-server/src/main/java/com/qniao/dam/query/tasktemplate/impl/TaskTemplateQueryServiceImpl.java

@ -52,9 +52,12 @@ public class TaskTemplateQueryServiceImpl implements TaskTemplateQueryService {
taskEndDate = LocalDate.now().with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
break;
case MONTHLY_TASK:
taskStartDate = LocalDate.now().withDayOfMonth(1);
int lastDay = LocalDate.now().lengthOfMonth();
taskEndDate = LocalDate.now().withDayOfMonth(lastDay);
taskStartDate = createTime.toLocalDate();
taskEndDate = taskStartDate.plusDays(30);
while (taskEndDate.isBefore(LocalDate.now())) {
taskStartDate = taskEndDate;
taskEndDate = taskStartDate.plusDays(30);
}
break;
}
return new Tuple(taskStartDate, taskEndDate);

2
dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/UserDailyTaskProgressQueryService.java

@ -8,4 +8,6 @@ import java.time.LocalDate;
public interface UserDailyTaskProgressQueryService {
UserDailyTaskProgress queryBy(Long userId, LocalDate progressDate, SubTaskTypeEnum subTaskType);
int count(Long userId, SubTaskTypeEnum subTaskType, LocalDate startDate, LocalDate endDate);
}

9
dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/impl/UserDailyTaskProgressQueryServiceImpl.java

@ -24,4 +24,13 @@ public class UserDailyTaskProgressQueryServiceImpl implements UserDailyTaskProgr
.eq(UserDailyTaskProgress::getSubTaskType, subTaskType)
.last("limit 1"));
}
@Override
public int count(Long userId, SubTaskTypeEnum subTaskType, LocalDate startDate, LocalDate endDate) {
return userDailyTaskProgressDao.selectList(new LambdaQueryWrapper<UserDailyTaskProgress>()
.eq(UserDailyTaskProgress::getUserId,userId)
.eq(UserDailyTaskProgress::getSubTaskType,subTaskType)
.between(UserDailyTaskProgress::getProgressDate,startDate,endDate))
.stream().map(UserDailyTaskProgress::getCompleteCount).mapToInt(Integer::intValue).sum();
}
}

1
dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/UserTaskCompleteQueryService.java

@ -12,6 +12,7 @@ public interface UserTaskCompleteQueryService {
UserGetUserTaskCompleteVo getUserTaskCompleteVo(UserGetUserTaskCompleteQueryParams queryParams);
UserTaskComplete queryBy(Long userId,
Long taskTemplateId,
LocalDate taskStartDate,
LocalDate taskEndDate);

41
dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/impl/UserTaskCompleteQueryServiceImpl.java

@ -1,20 +1,23 @@
package com.qniao.dam.query.utc.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Tuple;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qniao.dam.api.query.utc.user.request.UserGetUserTaskCompleteQueryParams;
import com.qniao.dam.api.query.utc.user.response.UserGetUserSubTaskCompleteVo;
import com.qniao.dam.api.query.utc.user.response.UserGetUserTaskCompleteVo;
import com.qniao.dam.domain.aggregate.tasktemplate.entity.SubTaskTemplate;
import com.qniao.dam.domain.aggregate.tasktemplate.entity.TaskTemplate;
import com.qniao.dam.domain.aggregate.utc.entity.UserSubTaskComplete;
import com.qniao.dam.domain.aggregate.utc.entity.UserTaskComplete;
import com.qniao.dam.domian.aggregate.tasktemplate.constant.TaskGroupEnum;
import com.qniao.dam.domian.aggregate.tasktemplate.constant.TaskStageEnum;
import com.qniao.dam.domian.aggregate.tasktemplate.constant.TaskTypeEnum;
import com.qniao.dam.infrastructure.persistent.dao.tasktemplate.TaskTemplateDao;
import com.qniao.dam.infrastructure.persistent.dao.utc.UserSubTaskCompleteDao;
import com.qniao.dam.infrastructure.persistent.dao.utc.UserTaskCompleteDao;
import com.qniao.dam.query.livematchmaker.LiveMatchmakerQueryService;
import com.qniao.dam.query.tasktemplate.TaskTemplateQueryService;
import com.qniao.dam.query.udtp.UserDailyTaskProgressQueryService;
import com.qniao.dam.query.utc.UserTaskCompleteQueryService;
import com.qniao.dau.domain.aggregate.livematchmaker.entity.LiveMatchmaker;
import com.qniao.framework.utils.TypeConvertUtils;
@ -22,6 +25,8 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Service
@ -36,7 +41,7 @@ public class UserTaskCompleteQueryServiceImpl implements UserTaskCompleteQuerySe
@Resource
private LiveMatchmakerQueryService liveMatchmakerQueryService;
@Resource
private TaskTemplateDao taskTemplateDao;
private UserDailyTaskProgressQueryService userDailyTaskProgressQueryService;
@Override
public UserGetUserTaskCompleteVo getUserTaskCompleteVo(UserGetUserTaskCompleteQueryParams queryParams) {
@ -44,22 +49,19 @@ public class UserTaskCompleteQueryServiceImpl implements UserTaskCompleteQuerySe
//任务群体处理
LiveMatchmaker liveMatchmaker = liveMatchmakerQueryService.queryByUserId(queryParams.getQueryUserId());
if (Objects.nonNull(liveMatchmaker)) {
TaskGroupEnum taskGroup = liveMatchmakerQueryService.getTaskGroup(liveMatchmaker);
TaskTypeEnum taskType = TaskTypeEnum.get(queryParams.getTaskType());
Tuple tuple = taskTemplateQueryService.getTaskDate(taskType,liveMatchmaker.getCreateTime());
UserTaskComplete userTaskComplete = queryBy(queryParams.getQueryUserId(), tuple.get(0), tuple.get(1));
Tuple tuple = taskTemplateQueryService.getTaskDate(taskType, liveMatchmaker.getCreateTime());
TaskStageEnum stageCode = TaskStageEnum.count(liveMatchmaker.getCreateTime().toLocalDate());
if (Objects.isNull(userTaskComplete)) {
TaskGroupEnum taskGroup = liveMatchmakerQueryService.getTaskGroup(liveMatchmaker);
TaskTemplate taskTemplate = taskTemplateQueryService.queryBy(taskGroup, taskType, stageCode);
if (Objects.nonNull(taskTemplate)) {
TaskTemplate taskTemplate = taskTemplateQueryService.queryBy(taskGroup, taskType, stageCode);
if (Objects.nonNull(taskTemplate)) {
UserTaskComplete userTaskComplete = queryBy(queryParams.getQueryUserId(), taskTemplate.getId(), tuple.get(0), tuple.get(1));
if (Objects.isNull(userTaskComplete)) {
vo = TypeConvertUtils.convert(taskTemplate, UserGetUserTaskCompleteVo.class);
vo.setTaskTemplateId(taskTemplate.getId());
vo.setTaskStartDate(tuple.get(0));
vo.setTaskEndDate(tuple.get(1));
}
} else {
TaskTemplate taskTemplate = taskTemplateDao.selectById(userTaskComplete.getTaskTemplateId());
if (Objects.nonNull(taskTemplate)) {
} else {
vo = TypeConvertUtils.convert(taskTemplate, UserGetUserTaskCompleteVo.class);
vo.setTaskTemplateId(taskTemplate.getId());
vo.setTaskStartDate(tuple.get(0));
@ -72,17 +74,30 @@ public class UserTaskCompleteQueryServiceImpl implements UserTaskCompleteQuerySe
}
if (Objects.nonNull(vo)) {
//补充子任务进度
vo.setSubList(userTaskCompleteDao.listSubVo(vo.getTaskTemplateId(), vo.getUserTaskCompleteId()));
List<SubTaskTemplate> subTaskTemplateList = taskTemplateQueryService.getSubList(taskTemplate.getId());
if (CollUtil.isNotEmpty(subTaskTemplateList)) {
List<UserGetUserSubTaskCompleteVo> subList = new ArrayList<>();
for (SubTaskTemplate subTaskTemplate : subTaskTemplateList) {
UserGetUserSubTaskCompleteVo subTaskCompleteVo = TypeConvertUtils.convert(subTaskTemplate, UserGetUserSubTaskCompleteVo.class);
int completeCount = userDailyTaskProgressQueryService.count(queryParams.getQueryUserId(), subTaskTemplate.getSubTaskType(), tuple.get(0), tuple.get(1));
subTaskCompleteVo.setCompleteCount(completeCount);
subTaskCompleteVo.setCompleteStatus(completeCount >= subTaskTemplate.getRequiredCount());
subList.add(subTaskCompleteVo);
}
vo.setSubList(subList);
}
}
}
return vo;
}
public UserTaskComplete queryBy(Long userId,
Long taskTemplateId,
LocalDate taskStartDate,
LocalDate taskEndDate) {
return userTaskCompleteDao.selectOne(new LambdaQueryWrapper<UserTaskComplete>()
.eq(UserTaskComplete::getUserId, userId)
.eq(UserTaskComplete::getTaskTemplateId, taskTemplateId)
.eq(UserTaskComplete::getTaskStartDate, taskStartDate)
.eq(UserTaskComplete::getTaskEndDate, taskEndDate)
.last("LIMIT 1"));

Loading…
Cancel
Save