Browse Source

直播红娘任务

master
张彭杰 2 months ago
parent
commit
211f59cd75
6 changed files with 133 additions and 4 deletions
  1. 2
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java
  2. 19
      dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/utc/event/UserTaskCompleteCommittedEvent.java
  3. 68
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/utc/UserTaskCompleteEventHandler.java
  4. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/utc/UserTaskCompleteAggregate.java
  5. 32
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/utc/CompleteUserTaskCompleteDomainService.java
  6. 9
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserTaskCompleteRepositoryImpl.java

2
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java

@ -42,6 +42,8 @@ public enum TradeTypeEnum {
LINK_MIC_REWARD(116, "连麦收益"),
TASK_REWARD(117, "任务奖励"),
PLATFORM_SERVICE_FEE(201, "平台服务费"),
WITHDRAW(202, "提现");

19
dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/utc/event/UserTaskCompleteCommittedEvent.java

@ -0,0 +1,19 @@
package com.qniao.dam.domian.aggregate.utc.event;
import com.qniao.domain.BaseDomainEvent;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserTaskCompleteCommittedEvent extends BaseDomainEvent {
private Long id;
private Long userId;
private Boolean subTaskCompleteStatus;
}

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

@ -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);
}
}
}

7
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/utc/UserTaskCompleteAggregate.java

@ -2,6 +2,8 @@ package com.qniao.dam.domain.aggregate.utc;
import com.qniao.dam.domain.aggregate.utc.entity.UserTaskComplete;
import com.qniao.dam.domain.aggregate.utc.repository.UserTaskCompleteRepository;
import com.qniao.dam.domian.aggregate.utc.event.UserTaskCompleteCommittedEvent;
import com.qniao.domain.BaseDomainEvent;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -28,4 +30,9 @@ public class UserTaskCompleteAggregate {
public void delete(Long id) {
repository.delete(id);
}
public BaseDomainEvent commit(UserTaskComplete entity,Boolean subTaskCompleteStatus) {
repository.save(entity);
return new UserTaskCompleteCommittedEvent(entity.getId(),entity.getUserId(),subTaskCompleteStatus);
}
}

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

@ -0,0 +1,32 @@
package com.qniao.dam.domain.service.utc;
import com.qniao.dam.domain.aggregate.utc.UserTaskCompleteAggregate;
import com.qniao.dam.domain.aggregate.utc.entity.UserTaskComplete;
import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate;
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount;
import com.qniao.dam.domian.aggregate.utc.constant.UserTaskCompleteRewardReceiveStatusEnum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
@Service
public class CompleteUserTaskCompleteDomainService {
@Resource
private UserTaskCompleteAggregate userTaskCompleteAggregate;
@Resource
private WalletAccountAggregate walletAccountAggregate;
@Transactional(rollbackFor = Exception.class)
public void handle(UserTaskComplete userTaskComplete,
WalletAccount walletAccount) {
userTaskComplete.setCompleteStatus(true);
userTaskComplete.setCompleteTime(LocalDateTime.now());
userTaskComplete.setRewardReceiveStatus(UserTaskCompleteRewardReceiveStatusEnum.RECEIVED);
userTaskCompleteAggregate.edit(userTaskComplete);
walletAccountAggregate.save(walletAccount);
}
}

9
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserTaskCompleteRepositoryImpl.java

@ -1,6 +1,8 @@
package com.qniao.dam.infrastructure.persistent.repository.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qniao.dam.domain.aggregate.utc.entity.UserSubTaskComplete;
import com.qniao.dam.domain.aggregate.utc.entity.UserTaskComplete;
import com.qniao.dam.domain.aggregate.utc.repository.UserTaskCompleteRepository;
import com.qniao.dam.infrastructure.persistent.dao.utc.UserSubTaskCompleteDao;
@ -26,7 +28,12 @@ public class UserTaskCompleteRepositoryImpl implements UserTaskCompleteRepositor
@Override
public UserTaskComplete load(Long id) {
return dao.selectById(id);
UserTaskComplete userTaskComplete = dao.selectById(id);
if (Objects.nonNull(userTaskComplete)) {
userTaskComplete.setSubList(userSubTaskCompleteDao.selectList(new LambdaQueryWrapper<UserSubTaskComplete>()
.eq(UserSubTaskComplete::getUserTaskCompleteId, id)));
}
return userTaskComplete;
}
@Override

Loading…
Cancel
Save