diff --git a/pom.xml b/pom.xml index 0801497..24aa498 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,11 @@ web-infrastructure ${project.version} + + com.alibaba.cloud + spring-cloud-starter-stream-rocketmq + ${spring-cloud-alibaba.version} + diff --git a/web-app/pom.xml b/web-app/pom.xml index 7afbdbd..e718030 100644 --- a/web-app/pom.xml +++ b/web-app/pom.xml @@ -21,6 +21,9 @@ com.zcloud.domain web-infrastructure - + + com.alibaba.cloud + spring-cloud-starter-stream-rocketmq + diff --git a/web-app/src/main/java/com/zcloud/domain/command/ProjectTaskScoreInfoUpdateExe.java b/web-app/src/main/java/com/zcloud/domain/command/ProjectTaskScoreInfoUpdateExe.java index 542fffb..29b529d 100644 --- a/web-app/src/main/java/com/zcloud/domain/command/ProjectTaskScoreInfoUpdateExe.java +++ b/web-app/src/main/java/com/zcloud/domain/command/ProjectTaskScoreInfoUpdateExe.java @@ -1,7 +1,12 @@ package com.zcloud.domain.command; +import cn.hutool.json.JSONUtil; +import com.alibaba.cola.dto.SingleResponse; import com.alibaba.cola.exception.BizException; import com.jjb.saas.framework.auth.utils.AuthContext; +import com.jjb.saas.message.client.message.facede.MessageFacade; +import com.jjb.saas.message.client.message.request.MessageSendCmd; +import com.jjb.saas.message.client.message.request.MessageTargetCmd; import com.zcloud.domain.domain.enums.CommonFlagEnum; import com.zcloud.domain.domain.enums.ScoreStatusEnum; import com.zcloud.domain.domain.gateway.ProjectTaskScoreInfoGateway; @@ -9,18 +14,27 @@ import com.zcloud.domain.domain.model.CorpInfoE; import com.zcloud.domain.domain.model.ProjectTaskScoreInfoE; import com.zcloud.domain.dto.ProjectTaskScoreInfoUpdateCmd; import com.zcloud.domain.dto.ProjectTaskSetScoreCmd; +import com.zcloud.domain.persistence.dataobject.ProjectTaskGroupUserDO; import com.zcloud.domain.persistence.dataobject.ProjectTaskScoreInfoDO; import com.zcloud.domain.persistence.repository.CorpInfoRepository; +import com.zcloud.domain.persistence.repository.ProjectTaskGroupUserRepository; import com.zcloud.domain.persistence.repository.ProjectTaskRepository; import com.zcloud.domain.persistence.repository.ProjectTaskScoreInfoRepository; +import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil; +import com.zcloud.gbscommon.todolistmq.event.TodoListDeleteEvent; +import com.zcloud.gbscommon.utils.UuidUtil; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** @@ -31,11 +45,16 @@ import java.util.List; */ @Component @AllArgsConstructor +@Slf4j public class ProjectTaskScoreInfoUpdateExe { private final ProjectTaskScoreInfoGateway projectTaskScoreInfoGateway; private final ProjectTaskScoreInfoRepository projectTaskScoreInfoRepository; private final ProjectTaskRepository projectTaskRepository; private final CorpInfoRepository corpInfoRepository; + private final ProjectTaskGroupUserRepository projectTaskGroupUserRepository; + @DubboReference + private final MessageFacade messageFacade; + private final TodoListEventPusherUtil todoListEventPusherUtil; @Transactional(rollbackFor = Exception.class) public void execute(ProjectTaskScoreInfoUpdateCmd projectTaskScoreInfoUpdateCmd) { @@ -66,13 +85,14 @@ public class ProjectTaskScoreInfoUpdateExe { //判断是否所有人都评分完成,如果完成则修改任务状态为完成 List listByTaskId = projectTaskScoreInfoRepository.getListByTaskId(info.getProjectTaskId()); Boolean finish = false; + BigDecimal averageScore = null; if(listByTaskId.size()==listByTaskId.stream().filter(item -> item.getScore() != null).count()){ BigDecimal totalScore = listByTaskId.stream() .map(ProjectTaskScoreInfoDO::getScore) .reduce(BigDecimal.ZERO, BigDecimal::add); // 计算平均分并保留两位小数 - BigDecimal averageScore = totalScore.divide(new BigDecimal(listByTaskId.size()),2,RoundingMode.HALF_UP); + averageScore = totalScore.divide(new BigDecimal(listByTaskId.size()),2,RoundingMode.HALF_UP); projectTaskRepository.updateScoreStatus(info.getProjectTaskId(), ScoreStatusEnum.SCORED.getCode(),averageScore); finish = true; @@ -80,10 +100,36 @@ public class ProjectTaskScoreInfoUpdateExe { //修改为评分中 projectTaskRepository.updateScoreStatus(info.getProjectTaskId(), ScoreStatusEnum.SCOREING.getCode(),null); } - if(finish){ + //删除对应待办 + TodoListDeleteEvent event2 = new TodoListDeleteEvent(); + event2.setForeignSubsidiaryKey(info.getId());// 业务附表ID 没有附表时为foreignKey的值 + todoListEventPusherUtil.sendMessageDeleteEvent(event2); + + + if(finish && averageScore !=null){ //完成后,发送消息通知 + List projectTaskGroupUserDOList = projectTaskGroupUserRepository.getListByTaskId(info.getProjectTaskId()); + for (ProjectTaskGroupUserDO projectTaskGroupUserDO : projectTaskGroupUserDOList) { + MessageSendCmd messageSendCmd = new MessageSendCmd(); + messageSendCmd.setBusinessId(UuidUtil.get32UUID()); + MessageTargetCmd messageTargetCmd = new MessageTargetCmd(); + messageTargetCmd.setUserId(projectTaskGroupUserDO.getUserId()); + messageSendCmd.setTargetCmd(messageTargetCmd); + messageSendCmd.setSourceCode(""); + messageSendCmd.setNeedTokenEnum(false); + Map sendParams = new HashMap(); +// sendParams.put("FirefightinglistName", info.getFireCheckName()); +// sendParams.put("checkPeriod", info.getFireCheckTypeName()); + messageSendCmd.setParams(sendParams); + try{ + log.info("评分完成消息提醒发送消息参数:messageSendCmd: {}", JSONUtil.toJsonStr(messageSendCmd)); + SingleResponse d = messageFacade.send(messageSendCmd); + log.info("评分完成消息提醒发送消息结果:d: {}", JSONUtil.toJsonStr(d)); + }catch (Exception e) { + log.error("评分完成消息提醒发送消息异常:messageSendCmd: {}", JSONUtil.toJsonStr(messageSendCmd), e); + } - + } } } diff --git a/web-app/src/main/java/com/zcloud/domain/command/ProjectTaskUpdateExe.java b/web-app/src/main/java/com/zcloud/domain/command/ProjectTaskUpdateExe.java index e89c9fb..e57be66 100644 --- a/web-app/src/main/java/com/zcloud/domain/command/ProjectTaskUpdateExe.java +++ b/web-app/src/main/java/com/zcloud/domain/command/ProjectTaskUpdateExe.java @@ -1,7 +1,13 @@ package com.zcloud.domain.command; import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.cola.dto.SingleResponse; import com.alibaba.cola.exception.BizException; +import com.alibaba.fastjson.JSONObject; +import com.jjb.saas.message.client.message.facede.MessageFacade; +import com.jjb.saas.message.client.message.request.MessageSendCmd; +import com.jjb.saas.message.client.message.request.MessageTargetCmd; import com.zcloud.domain.command.convertor.ProjectTaskGroupUserCoConvertor; import com.zcloud.domain.command.convertor.ProjectTaskInfoCoConvertor; import com.zcloud.domain.command.convertor.ProjectTaskScoreInfoCoConvertor; @@ -17,18 +23,20 @@ import com.zcloud.domain.persistence.dataobject.ProjectTaskDO; import com.zcloud.domain.persistence.dataobject.ProjectTaskGroupUserDO; import com.zcloud.domain.persistence.dataobject.ProjectTaskInfoDO; import com.zcloud.domain.persistence.dataobject.ProjectTaskScoreInfoDO; -import com.zcloud.domain.persistence.repository.ProjectTaskGroupUserRepository; -import com.zcloud.domain.persistence.repository.ProjectTaskInfoRepository; -import com.zcloud.domain.persistence.repository.ProjectTaskRepository; -import com.zcloud.domain.persistence.repository.ProjectTaskScoreInfoRepository; +import com.zcloud.domain.persistence.repository.*; +import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil; +import com.zcloud.gbscommon.todolistmq.event.TodoListAddBatchEvent; +import com.zcloud.gbscommon.todolistmq.event.TodoListAddEvent; import com.zcloud.gbscommon.utils.Tools; +import com.zcloud.gbscommon.utils.UuidUtil; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @@ -40,6 +48,7 @@ import java.util.stream.Collectors; */ @Component @AllArgsConstructor +@Slf4j public class ProjectTaskUpdateExe { private final ProjectTaskGateway projectTaskGateway; private final ProjectTaskRepository projectTaskRepository; @@ -49,6 +58,9 @@ public class ProjectTaskUpdateExe { private final ProjectTaskInfoRepository projectTaskInfoRepository; private final ProjectTaskScoreInfoRepository projectTaskScoreInfoRepository; private final ProjectTaskScoreInfoCoConvertor projectTaskScoreInfoCoConvertor; + private final TodoListEventPusherUtil todoListEventPusherUtil; + @DubboReference + private MessageFacade messageFacade; @Transactional(rollbackFor = Exception.class) public void execute(ProjectTaskUpdateCmd projectTaskUpdateCmd) { @@ -155,13 +167,63 @@ public class ProjectTaskUpdateExe { //评分状态 List projectTaskDOExecutingList =projectTaskRepository.getExecutingList(); - if(CollUtil.isNotEmpty(projectTaskDOExecutingList)){ projectTaskDOExecutingList.forEach(info->{ info.setExecuteStatus(ProjectTaskExecuteStatusEnum.FINISHED.getCode()); }); List idFinishedList = projectTaskDOExecutingList.stream().map(ProjectTaskDO::getId).collect(Collectors.toList()); projectTaskRepository.updateExecuteStatusBatchById(ProjectTaskExecuteStatusEnum.FINISHED.getCode(),idFinishedList); + + //每一个都需要 消息提醒和待办 + for (ProjectTaskDO projectTaskDO : projectTaskDOExecutingList) { + try{ + List todoListAddEventList = new ArrayList<>(); + List projectTaskScoreInfoDOList = projectTaskScoreInfoRepository.getListByTaskId(projectTaskDO.getProjectTaskId()); + for (ProjectTaskScoreInfoDO projectTaskScoreInfoDO : projectTaskScoreInfoDOList) { + //发送消息 + MessageSendCmd messageSendCmd = new MessageSendCmd(); + messageSendCmd.setBusinessId(UuidUtil.get32UUID()); + MessageTargetCmd messageTargetCmd = new MessageTargetCmd(); + messageTargetCmd.setUserId(projectTaskScoreInfoDO.getUserId()); + messageSendCmd.setTargetCmd(messageTargetCmd); + messageSendCmd.setSourceCode(""); + messageSendCmd.setNeedTokenEnum(false); + Map sendParams = new HashMap(); +// sendParams.put("FirefightinglistName", info.getFireCheckName()); +// sendParams.put("checkPeriod", info.getFireCheckTypeName()); + messageSendCmd.setParams(sendParams); + try{ + log.info("任务结束消息提醒发送消息参数:messageSendCmd: {}", JSONUtil.toJsonStr(messageSendCmd)); + SingleResponse d = messageFacade.send(messageSendCmd); + log.info("任务结束消息提醒发送消息结果:d: {}", JSONUtil.toJsonStr(d)); + }catch (Exception e) { + log.error("任务结束消息提醒发送消息异常:messageSendCmd: {}", JSONUtil.toJsonStr(messageSendCmd), e); + } + //待排查 待办 + TodoListAddEvent event = new TodoListAddEvent(); + event.setTitle(projectTaskScoreInfoDO.getUserName() + "-课题评分"); +// event.setContent("您有一条[" + cmd.getFireCheckName() + "(" + cmd.getFireCheckTypeName() + ")】待检查,请您及时排查,避免超期。"); + event.setContent("["+projectTaskDO.getProjectName()+"]已结束,请及时对本次课题任务进行评分"); + event.setForeignKey(projectTaskDO.getId()); // 业务表ID -申请 + event.setForeignSubsidiaryKey(projectTaskScoreInfoDO.getId()); // 业务附表ID 没有附表时为foreignKey的值 + event.setReceiveUser(projectTaskScoreInfoDO.getUserId());// user表ID + event.setPcFlag(1); // 是否PC端待办 1是 0否 + event.setAppFlag(1); // 是否APP端待办 1是 0否 + event.setOtherParams(new JSONObject()); + todoListAddEventList.add(event); + } + + TodoListAddBatchEvent event3 = new TodoListAddBatchEvent(); + event3.setTodoListAddEventList(todoListAddEventList); + todoListEventPusherUtil.sendMessageAddBatchEvent(event3); + }catch (Exception e){ + log.error("发送待办消息失败",e); + } + } + + + + }