diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/utc/user/response/UserGetUserSubTaskCompleteVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/utc/user/response/UserGetUserSubTaskCompleteVo.java index 18af95c..cd6279e 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/utc/user/response/UserGetUserSubTaskCompleteVo.java +++ b/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; diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/utc/UserTaskCompleteEventHandler.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/utc/UserTaskCompleteEventHandler.java index ab8587d..b03dc49 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/utc/UserTaskCompleteEventHandler.java +++ b/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 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 { diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/utc/CompleteUserTaskCompleteDomainService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/utc/CompleteUserTaskCompleteDomainService.java index fd66fb4..70b30f4 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/utc/CompleteUserTaskCompleteDomainService.java +++ b/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); + } } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/tasktemplate/impl/TaskTemplateQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/tasktemplate/impl/TaskTemplateQueryServiceImpl.java index 5943264..a1e2f26 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/tasktemplate/impl/TaskTemplateQueryServiceImpl.java +++ b/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); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/UserDailyTaskProgressQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/UserDailyTaskProgressQueryService.java index 68b3f08..8c14bf9 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/UserDailyTaskProgressQueryService.java +++ b/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); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/impl/UserDailyTaskProgressQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/impl/UserDailyTaskProgressQueryServiceImpl.java index 317977f..e4c3216 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/udtp/impl/UserDailyTaskProgressQueryServiceImpl.java +++ b/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() + .eq(UserDailyTaskProgress::getUserId,userId) + .eq(UserDailyTaskProgress::getSubTaskType,subTaskType) + .between(UserDailyTaskProgress::getProgressDate,startDate,endDate)) + .stream().map(UserDailyTaskProgress::getCompleteCount).mapToInt(Integer::intValue).sum(); + } } \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/UserTaskCompleteQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/UserTaskCompleteQueryService.java index 5d77c62..5fe1c85 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/UserTaskCompleteQueryService.java +++ b/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); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/impl/UserTaskCompleteQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/impl/UserTaskCompleteQueryServiceImpl.java index 8b7f604..46e3ed1 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/utc/impl/UserTaskCompleteQueryServiceImpl.java +++ b/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 subTaskTemplateList = taskTemplateQueryService.getSubList(taskTemplate.getId()); + if (CollUtil.isNotEmpty(subTaskTemplateList)) { + List 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() .eq(UserTaskComplete::getUserId, userId) + .eq(UserTaskComplete::getTaskTemplateId, taskTemplateId) .eq(UserTaskComplete::getTaskStartDate, taskStartDate) .eq(UserTaskComplete::getTaskEndDate, taskEndDate) .last("LIMIT 1"));