From d9c6a04aff117a21d6ce369f6ffc82a16d401610 Mon Sep 17 00:00:00 2001 From: Derran Date: Tue, 27 Jan 2026 19:00:25 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B4=E6=92=AD=E7=BA=A2=E5=A8=98=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/SubTaskTypeEnum.java | 2 +- .../utc/entity/UserSubTaskComplete.java | 8 ++ .../utc/entity/UserTaskComplete.java | 20 +++++ .../UserEffectiveLiveDurationCommittedMQ.java | 21 +++++ .../utc/UserTaskCompleteEventHandler.java | 85 +++++++++++++++++++ .../infrastructure/constant/MqExchange.java | 4 +- .../dam/infrastructure/constant/MqQueue.java | 2 + .../impl/UserTaskCompleteRepositoryImpl.java | 24 +++--- .../TaskTemplateQueryService.java | 5 ++ .../impl/TaskTemplateQueryServiceImpl.java | 13 +++ .../utc/UserTaskCompleteQueryService.java | 11 +++ .../UserTaskCompleteQueryServiceImpl.java | 20 ++++- 12 files changed, 196 insertions(+), 19 deletions(-) create mode 100644 dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/utc/event/UserEffectiveLiveDurationCommittedMQ.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/utc/UserTaskCompleteEventHandler.java diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/tasktemplate/constant/SubTaskTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/tasktemplate/constant/SubTaskTypeEnum.java index 89f330a..146e13e 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/tasktemplate/constant/SubTaskTypeEnum.java +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/tasktemplate/constant/SubTaskTypeEnum.java @@ -10,7 +10,7 @@ import lombok.Getter; @JsonFormat(shape = JsonFormat.Shape.OBJECT) public enum SubTaskTypeEnum { - DAILY_EFFECTIVE_LIVE_DURATION(1, "每日有效直播时长"), + EFFECTIVE_LIVE_DURATION(1, "有效直播时长"), EFFECTIVE_BLIND_DATE_COUNT(2, "有效相亲次数"), diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/utc/entity/UserSubTaskComplete.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/utc/entity/UserSubTaskComplete.java index 16ccce5..f98d0fe 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/utc/entity/UserSubTaskComplete.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/utc/entity/UserSubTaskComplete.java @@ -28,4 +28,12 @@ public class UserSubTaskComplete extends Entity { @ApiModelProperty("完成时间") private LocalDateTime completeTime; + public static UserSubTaskComplete init(Long subTaskTemplateId) { + UserSubTaskComplete entity = new UserSubTaskComplete(); + entity.setSubTaskTemplateId(subTaskTemplateId); + entity.setCompleteCount(0); + entity.setCompleteStatus(false); + return entity; + } + } diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/utc/entity/UserTaskComplete.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/utc/entity/UserTaskComplete.java index 73820e2..d12b7c0 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/utc/entity/UserTaskComplete.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/utc/entity/UserTaskComplete.java @@ -44,4 +44,24 @@ public class UserTaskComplete extends Entity { @ApiModelProperty("子任务列表") private transient List subList; + + private transient List insertSubList; + private transient List updateSubList; + private transient List deleteSubList; + + + public static UserTaskComplete init(Long userId, + Long taskTemplateId, + LocalDate taskStartDate, + LocalDate taskEndDate) { + UserTaskComplete userTaskComplete = new UserTaskComplete(); + userTaskComplete.setUserId(userId); + userTaskComplete.setTaskTemplateId(taskTemplateId); + userTaskComplete.setTaskStartDate(taskStartDate); + userTaskComplete.setTaskEndDate(taskEndDate); + userTaskComplete.setCompleteStatus(false); + userTaskComplete.setRewardReceiveStatus(UserTaskCompleteRewardReceiveStatusEnum.UNRECEIVED); + return userTaskComplete; + } + } diff --git a/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/utc/event/UserEffectiveLiveDurationCommittedMQ.java b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/utc/event/UserEffectiveLiveDurationCommittedMQ.java new file mode 100644 index 0000000..06b5d81 --- /dev/null +++ b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/utc/event/UserEffectiveLiveDurationCommittedMQ.java @@ -0,0 +1,21 @@ +package com.qniao.dam.domian.aggregate.utc.event; + +import com.qniao.dam.domian.aggregate.tasktemplate.constant.SubTaskTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class UserEffectiveLiveDurationCommittedMQ implements Serializable { + + @ApiModelProperty("用户标识") + private Long userId; + + @ApiModelProperty("子任务类型") + private SubTaskTypeEnum subTaskType; + + @ApiModelProperty("提交次数") + private Integer commitCount; + +} 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 new file mode 100644 index 0000000..28cbd6a --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/utc/UserTaskCompleteEventHandler.java @@ -0,0 +1,85 @@ +package com.qniao.dam.application.handler.utc; + +import cn.hutool.core.lang.Tuple; +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.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.utc.event.UserEffectiveLiveDurationCommittedMQ; +import com.qniao.dam.infrastructure.constant.MqExchange; +import com.qniao.dam.infrastructure.constant.MqQueue; +import com.qniao.dam.query.livematchmaker.LiveMatchmakerQueryService; +import com.qniao.dam.query.tasktemplate.TaskTemplateQueryService; +import com.qniao.dam.query.utc.UserTaskCompleteQueryService; +import com.qniao.dau.domain.aggregate.livematchmaker.entity.LiveMatchmaker; +import com.qniao.domain.BaseApplicationService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.ExchangeTypes; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +@Component +@Slf4j +public class UserTaskCompleteEventHandler extends BaseApplicationService { + + @Resource + private LiveMatchmakerQueryService liveMatchmakerQueryService; + @Resource + private TaskTemplateQueryService taskTemplateQueryService; + @Resource + private UserTaskCompleteQueryService userTaskCompleteQueryService; + + @RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.USER_SUB_TASK_COMMITTED), + exchange = @Exchange(value = MqExchange.USER_SUB_TASK_COMMITTED, + type = ExchangeTypes.FANOUT))) + public void handle(UserEffectiveLiveDurationCommittedMQ mq) { + try { + synchronized (mq.getUserId().toString().intern()) { + LiveMatchmaker liveMatchmaker = liveMatchmakerQueryService.queryByUserId(mq.getUserId()); + if (Objects.nonNull(liveMatchmaker)) { + TaskGroupEnum taskGroup = liveMatchmakerQueryService.getTaskGroup(liveMatchmaker); + TaskStageEnum stageCode = TaskStageEnum.count(liveMatchmaker.getCreateTime().toLocalDate()); + //查询任务模板 放redis + TaskTemplate taskTemplate = taskTemplateQueryService.queryBy(taskGroup, TaskTypeEnum.DAILY_TASK, stageCode); + if (Objects.nonNull(taskTemplate)) { + List subTaskTemplateList = taskTemplateQueryService.getSubList(taskTemplate.getId()); + for (SubTaskTemplate subTaskTemplate : subTaskTemplateList) { + if (subTaskTemplate.getSubTaskType().equals(mq.getSubTaskType())) { + //存在子任务 + Tuple tuple = taskTemplateQueryService.getTaskDate(TaskTypeEnum.DAILY_TASK); + UserTaskComplete userTaskComplete = userTaskCompleteQueryService.queryBy(mq.getUserId(), taskTemplate.getId(), tuple.get(0), tuple.get(1)); + if (Objects.isNull(userTaskComplete)) { + userTaskComplete = UserTaskComplete.init(mq.getUserId(), taskTemplate.getId(), tuple.get(0), tuple.get(1)); + UserSubTaskComplete userSubTaskComplete = UserSubTaskComplete.init(subTaskTemplate.getId()); + userTaskComplete.setInsertSubList(Collections.singletonList(userSubTaskComplete)); + } else { + if (!userTaskComplete.getCompleteStatus()) { + UserSubTaskComplete userSubTaskComplete = userTaskCompleteQueryService.querySubBy(userTaskComplete.getId(), subTaskTemplate.getId()); + //todo + } + } + break; + } + } + } + } + } + } catch (Exception e) { + log.error("直播时长任务提交事件处理异常", e); + } + } + + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java index a9171b2..986051c 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java @@ -1,7 +1,5 @@ package com.qniao.dam.infrastructure.constant; -import com.qniao.dam.domian.aggregate.puc.event.MatchmakerPointUpgradeExchangedMQ; - public interface MqExchange { String MARRIAGE_BOUNTY_ORDER_CREATED = "fanout.marriageBountyOrderCreated"; @@ -39,4 +37,6 @@ public interface MqExchange { String CUSTOMIZED_SERVICE_CONTRACT_CREATED = "fanout.CustomizedServiceContractCreated"; String DATING_STORE_CUSTOMER_TASK_OPERATED = "fanout.DatingStoreCustomerTaskOperated"; + + String USER_SUB_TASK_COMMITTED = "fanout.userSubTaskCommitted"; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java index 06c5b4b..ea1bc8d 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java @@ -29,4 +29,6 @@ public interface MqQueue { String DATING_STORE_CUSTOMER_SIGNED = MqExchange.DATING_STORE_CUSTOMER_SIGNED + serviceName; String DATING_STORE_CUSTOMER_TASK_OPERATED = MqExchange.DATING_STORE_CUSTOMER_TASK_OPERATED + serviceName; + + String USER_SUB_TASK_COMMITTED = MqExchange.USER_SUB_TASK_COMMITTED + serviceName; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserTaskCompleteRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserTaskCompleteRepositoryImpl.java index bdc4b16..90bfaed 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserTaskCompleteRepositoryImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserTaskCompleteRepositoryImpl.java @@ -34,20 +34,20 @@ public class UserTaskCompleteRepositoryImpl implements UserTaskCompleteRepositor public Long save(UserTaskComplete entity) { if (Objects.isNull(entity.getId()) || Objects.isNull(dao.selectById(entity.getId()))) { dao.insert(entity); - if (CollUtil.isNotEmpty(entity.getSubList())) { - entity.getSubList().forEach(item -> { - item.setUserTaskCompleteId(entity.getId()); - userSubTaskCompleteDao.insert(item); - }); - } } else { dao.updateById(entity); - if (CollUtil.isNotEmpty(entity.getSubList())) { - entity.getSubList().forEach(item -> { - item.setUserTaskCompleteId(entity.getId()); - userSubTaskCompleteDao.updateById(item); - }); - } + } + if (CollUtil.isNotEmpty(entity.getInsertSubList())) { + entity.getInsertSubList().forEach(item -> { + item.setUserTaskCompleteId(entity.getId()); + userSubTaskCompleteDao.insert(item); + }); + } + if (CollUtil.isNotEmpty(entity.getUpdateSubList())) { + entity.getUpdateSubList().forEach(item -> { + item.setUserTaskCompleteId(entity.getId()); + userSubTaskCompleteDao.updateById(item); + }); } return entity.getId(); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/tasktemplate/TaskTemplateQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/tasktemplate/TaskTemplateQueryService.java index 9d1c114..c7cf71d 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/tasktemplate/TaskTemplateQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/tasktemplate/TaskTemplateQueryService.java @@ -1,11 +1,14 @@ package com.qniao.dam.query.tasktemplate; import cn.hutool.core.lang.Tuple; +import com.qniao.dam.domain.aggregate.tasktemplate.entity.SubTaskTemplate; import com.qniao.dam.domain.aggregate.tasktemplate.entity.TaskTemplate; 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 java.util.List; + public interface TaskTemplateQueryService { Tuple getTaskDate(TaskTypeEnum taskTypeEnum); @@ -13,4 +16,6 @@ public interface TaskTemplateQueryService { TaskTemplate queryBy(TaskGroupEnum taskGroup, TaskTypeEnum taskType, TaskStageEnum stageCode); + + List getSubList(Long taskTemplateId); } 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 16cc3f7..851ec7e 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 @@ -2,10 +2,12 @@ package com.qniao.dam.query.tasktemplate.impl; import cn.hutool.core.lang.Tuple; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qniao.dam.domain.aggregate.tasktemplate.entity.SubTaskTemplate; import com.qniao.dam.domain.aggregate.tasktemplate.entity.TaskTemplate; 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.SubTaskTemplateDao; import com.qniao.dam.infrastructure.persistent.dao.tasktemplate.TaskTemplateDao; import com.qniao.dam.query.tasktemplate.TaskTemplateQueryService; import org.springframework.stereotype.Service; @@ -14,12 +16,16 @@ import javax.annotation.Resource; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; +import java.util.Collections; +import java.util.List; @Service public class TaskTemplateQueryServiceImpl implements TaskTemplateQueryService { @Resource private TaskTemplateDao taskTemplateDao; + @Resource + private SubTaskTemplateDao subTaskTemplateDao; /** * 计算任务的起始时间 @@ -59,4 +65,11 @@ public class TaskTemplateQueryServiceImpl implements TaskTemplateQueryService { .eq(TaskTemplate::getStageCode, stageCode) .last("LIMIT 1")); } + + @Override + public List getSubList(Long taskTemplateId) { + return subTaskTemplateDao.selectList(new LambdaQueryWrapper() + .eq(SubTaskTemplate::getTaskTemplateId, taskTemplateId) + .orderByAsc(SubTaskTemplate::getSort)); + } } \ 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 c859ee7..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 @@ -2,8 +2,19 @@ package com.qniao.dam.query.utc; import com.qniao.dam.api.query.utc.user.request.UserGetUserTaskCompleteQueryParams; import com.qniao.dam.api.query.utc.user.response.UserGetUserTaskCompleteVo; +import com.qniao.dam.domain.aggregate.utc.entity.UserSubTaskComplete; +import com.qniao.dam.domain.aggregate.utc.entity.UserTaskComplete; + +import java.time.LocalDate; public interface UserTaskCompleteQueryService { UserGetUserTaskCompleteVo getUserTaskCompleteVo(UserGetUserTaskCompleteQueryParams queryParams); + + UserTaskComplete queryBy(Long userId, + Long taskTemplateId, + LocalDate taskStartDate, + LocalDate taskEndDate); + + UserSubTaskComplete querySubBy(Long userTaskCompleteId, Long subTaskTemplateId); } 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 e9b0e43..92d36d9 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 @@ -5,10 +5,12 @@ 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.UserGetUserTaskCompleteVo; 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.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; @@ -27,6 +29,8 @@ public class UserTaskCompleteQueryServiceImpl implements UserTaskCompleteQuerySe @Resource private UserTaskCompleteDao userTaskCompleteDao; @Resource + private UserSubTaskCompleteDao userSubTaskCompleteDao; + @Resource private TaskTemplateQueryService taskTemplateQueryService; @Resource private LiveMatchmakerQueryService liveMatchmakerQueryService; @@ -60,10 +64,10 @@ public class UserTaskCompleteQueryServiceImpl implements UserTaskCompleteQuerySe return vo; } - private UserTaskComplete queryBy(Long userId, - Long taskTemplateId, - LocalDate taskStartDate, - LocalDate taskEndDate) { + public UserTaskComplete queryBy(Long userId, + Long taskTemplateId, + LocalDate taskStartDate, + LocalDate taskEndDate) { return userTaskCompleteDao.selectOne(new LambdaQueryWrapper() .eq(UserTaskComplete::getUserId, userId) .eq(UserTaskComplete::getTaskTemplateId, taskTemplateId) @@ -71,4 +75,12 @@ public class UserTaskCompleteQueryServiceImpl implements UserTaskCompleteQuerySe .eq(UserTaskComplete::getTaskEndDate, taskEndDate) .last("LIMIT 1")); } + + @Override + public UserSubTaskComplete querySubBy(Long userTaskCompleteId, Long subTaskTemplateId) { + return userSubTaskCompleteDao.selectOne(new LambdaQueryWrapper() + .eq(UserSubTaskComplete::getUserTaskCompleteId, userTaskCompleteId) + .eq(UserSubTaskComplete::getSubTaskTemplateId, subTaskTemplateId) + .last("LIMIT 1")); + } } \ No newline at end of file