|
|
|
@ -1,11 +1,16 @@ |
|
|
|
package com.qniao.dam.application.handler.utc; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.lang.Tuple; |
|
|
|
import com.google.common.eventbus.Subscribe; |
|
|
|
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.UserTaskCompleteAggregate; |
|
|
|
import com.qniao.dam.domain.aggregate.utc.entity.UserSubTaskComplete; |
|
|
|
import com.qniao.dam.domain.aggregate.utc.entity.UserTaskComplete; |
|
|
|
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; |
|
|
|
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; |
|
|
|
import com.qniao.dam.domain.service.utc.CompleteUserTaskCompleteDomainService; |
|
|
|
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; |
|
|
|
@ -13,22 +18,31 @@ import com.qniao.dam.domian.aggregate.tasktemplate.constant.TaskTypeEnum; |
|
|
|
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; |
|
|
|
import com.qniao.dam.domian.aggregate.utc.event.UserTaskCompleteCommittedEvent; |
|
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; |
|
|
|
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; |
|
|
|
import com.qniao.dam.infrastructure.constant.MqExchange; |
|
|
|
import com.qniao.dam.infrastructure.constant.MqQueue; |
|
|
|
import com.qniao.dam.infrastructure.persistent.dao.tasktemplate.TaskTemplateDao; |
|
|
|
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.utc.UserTaskCompleteQueryService; |
|
|
|
import com.qniao.dam.query.walletaccount.WalletAccountQueryService; |
|
|
|
import com.qniao.dau.domain.aggregate.livematchmaker.entity.LiveMatchmaker; |
|
|
|
import com.qniao.domain.BaseApplicationService; |
|
|
|
import com.qniao.domain.BaseDomainEvent; |
|
|
|
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.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.Collections; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Objects; |
|
|
|
@ -45,6 +59,14 @@ public class UserTaskCompleteEventHandler extends BaseApplicationService { |
|
|
|
private UserTaskCompleteQueryService userTaskCompleteQueryService; |
|
|
|
@Resource |
|
|
|
private UserTaskCompleteAggregate userTaskCompleteAggregate; |
|
|
|
@Resource |
|
|
|
private WalletAccountQueryService walletAccountQueryService; |
|
|
|
@Resource |
|
|
|
private UserTaskCompleteDao userTaskCompleteDao; |
|
|
|
@Resource |
|
|
|
private TaskTemplateDao taskTemplateDao; |
|
|
|
@Resource |
|
|
|
private CompleteUserTaskCompleteDomainService completeUserTaskCompleteDomainService; |
|
|
|
|
|
|
|
@RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.EFFECTIVE_LIVE_DURATION_COMMITTED), |
|
|
|
exchange = @Exchange(value = MqExchange.EFFECTIVE_LIVE_DURATION_COMMITTED, |
|
|
|
@ -101,14 +123,15 @@ public class UserTaskCompleteEventHandler extends BaseApplicationService { |
|
|
|
//存在子任务 |
|
|
|
Tuple tuple = taskTemplateQueryService.getTaskDate(TaskTypeEnum.DAILY_TASK); |
|
|
|
UserTaskComplete userTaskComplete = userTaskCompleteQueryService.queryBy(userId, taskTemplate.getId(), tuple.get(0), tuple.get(1)); |
|
|
|
UserSubTaskComplete userSubTaskComplete = null; |
|
|
|
if (Objects.isNull(userTaskComplete)) { |
|
|
|
userTaskComplete = UserTaskComplete.init(userId, taskTemplate.getId(), tuple.get(0), tuple.get(1)); |
|
|
|
UserSubTaskComplete userSubTaskComplete = UserSubTaskComplete.init(subTaskTemplate.getId()); |
|
|
|
userSubTaskComplete = UserSubTaskComplete.init(subTaskTemplate.getId()); |
|
|
|
userSubTaskComplete.commit(commitCount, subTaskTemplate.getRequiredCount()); |
|
|
|
userTaskComplete.setInsertSubList(Collections.singletonList(userSubTaskComplete)); |
|
|
|
} else { |
|
|
|
if (!userTaskComplete.getCompleteStatus()) { |
|
|
|
UserSubTaskComplete userSubTaskComplete = userTaskCompleteQueryService.querySubBy(userTaskComplete.getId(), subTaskTemplate.getId()); |
|
|
|
userSubTaskComplete = userTaskCompleteQueryService.querySubBy(userTaskComplete.getId(), subTaskTemplate.getId()); |
|
|
|
if (Objects.isNull(userSubTaskComplete)) { |
|
|
|
userSubTaskComplete = UserSubTaskComplete.init(subTaskTemplate.getId()); |
|
|
|
userSubTaskComplete.commit(commitCount, subTaskTemplate.getRequiredCount()); |
|
|
|
@ -121,7 +144,10 @@ public class UserTaskCompleteEventHandler extends BaseApplicationService { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
userTaskCompleteAggregate.edit(userTaskComplete); |
|
|
|
if (Objects.nonNull(userSubTaskComplete)) { |
|
|
|
BaseDomainEvent event = userTaskCompleteAggregate.commit(userTaskComplete, userSubTaskComplete.getCompleteStatus()); |
|
|
|
this.sendEvent(event); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -130,4 +156,40 @@ public class UserTaskCompleteEventHandler extends BaseApplicationService { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Subscribe |
|
|
|
private void handle(UserTaskCompleteCommittedEvent event) { |
|
|
|
try { |
|
|
|
if (event.getSubTaskCompleteStatus()) { |
|
|
|
synchronized (event.getUserId().toString().intern()) { |
|
|
|
UserTaskComplete userTaskComplete = userTaskCompleteDao.selectById(event.getId()); |
|
|
|
if (!userTaskComplete.getCompleteStatus()) { |
|
|
|
List<SubTaskTemplate> subTaskTemplateList = taskTemplateQueryService.getSubList(userTaskComplete.getTaskTemplateId()); |
|
|
|
if (CollUtil.isNotEmpty(subTaskTemplateList)) { |
|
|
|
boolean completeStatus = true; |
|
|
|
for (SubTaskTemplate subTaskTemplate : subTaskTemplateList) { |
|
|
|
UserSubTaskComplete userSubTaskComplete = userTaskCompleteQueryService.querySubBy(userTaskComplete.getId(), subTaskTemplate.getId()); |
|
|
|
if (Objects.isNull(userSubTaskComplete) || !userSubTaskComplete.getCompleteStatus()) { |
|
|
|
completeStatus = false; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (completeStatus) { |
|
|
|
TaskTemplate taskTemplate = taskTemplateDao.selectById(userTaskComplete.getTaskTemplateId()); |
|
|
|
BigDecimal revenue = new BigDecimal(taskTemplate.getRewardValue()); |
|
|
|
WalletAccount 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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("用户任务提交事件处理异常", e); |
|
|
|
} |
|
|
|
} |
|
|
|
} |