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