From a4651b0e74fd8d6bb067e00cb4c5bd3198cff39c Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Mon, 30 Aug 2021 15:51:16 +0800 Subject: [PATCH] =?UTF-8?q?20210830=E4=BA=A4=E4=BB=98=E7=89=A9=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/DeliverMessageWithChecker.java | 52 +++++++++++ .../message/DeliverMessageWithUpload.java | 4 +- .../com/ccsens/common/bean/vo/CMemberVo.java | 19 ++++ .../common/persist/dao/ProMemberDao.java | 16 ++++ .../ccsens/common/persist/dao/ProRoleDao.java | 7 ++ .../ccsens/common/service/DeliverService.java | 90 ++++++++++++++++++- .../common/service/IDeliverService.java | 4 +- .../resources/mapper_dao/ProMemberDao.xml | 26 +++++- .../main/resources/mapper_dao/ProRoleDao.xml | 9 ++ 9 files changed, 220 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/com/ccsens/common/bean/message/DeliverMessageWithChecker.java create mode 100644 common/src/main/java/com/ccsens/common/bean/vo/CMemberVo.java diff --git a/common/src/main/java/com/ccsens/common/bean/message/DeliverMessageWithChecker.java b/common/src/main/java/com/ccsens/common/bean/message/DeliverMessageWithChecker.java new file mode 100644 index 00000000..df927056 --- /dev/null +++ b/common/src/main/java/com/ccsens/common/bean/message/DeliverMessageWithChecker.java @@ -0,0 +1,52 @@ +package com.ccsens.common.bean.message; + +import com.ccsens.common.util.Constant; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + * @author 逗 + */ +@Data +public class DeliverMessageWithChecker { + private String type = Constant.MessageType.CHECKER_DELIVER; + private String event; + + public DeliverMessageWithChecker() { + + } + + private Data data; + + @Setter + @Getter + public static class Data{ + //任务分解id + Long taskId; + //任务详情id + Long taskDetailId; + //交付物id + Long deliverId; + //角色id(上传的任务所属的角色id) + Long roleId; + //检查人id(memberId) + Long memberId; + //检查人名字(成员名) + String memberName; + + } + + public DeliverMessageWithChecker(Long taskId, Long taskDetailId, Long deliverId, Long roleId, Long memberId, String memberName){ + this(); + Data d = new Data(); + d.setTaskId(taskId); + d.setTaskDetailId(taskDetailId); + d.setDeliverId(deliverId); + d.setRoleId(roleId); + d.setMemberId(memberId); + d.setMemberName(memberName); + setData(d); + } + +} diff --git a/common/src/main/java/com/ccsens/common/bean/message/DeliverMessageWithUpload.java b/common/src/main/java/com/ccsens/common/bean/message/DeliverMessageWithUpload.java index d438e7d0..574b78dc 100644 --- a/common/src/main/java/com/ccsens/common/bean/message/DeliverMessageWithUpload.java +++ b/common/src/main/java/com/ccsens/common/bean/message/DeliverMessageWithUpload.java @@ -30,9 +30,9 @@ public class DeliverMessageWithUpload { Long deliverId; //角色id(上传的任务所属的角色id) Long roleId; - //上传者id(memberId) + //上传者/检查者 id(memberId) Long memberId; - //上传者名字(成员名) + //上传者/检查者 名字(成员名) String memberName; } diff --git a/common/src/main/java/com/ccsens/common/bean/vo/CMemberVo.java b/common/src/main/java/com/ccsens/common/bean/vo/CMemberVo.java new file mode 100644 index 00000000..d6533138 --- /dev/null +++ b/common/src/main/java/com/ccsens/common/bean/vo/CMemberVo.java @@ -0,0 +1,19 @@ +package com.ccsens.common.bean.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + + +@Data +public class CMemberVo { + @Data + @ApiModel("查看定期任务返回值") + public static class MemberIdAndName{ + @ApiModelProperty("成员id") + private Long id; + @ApiModelProperty("成员名") + private String name; + } +} diff --git a/common/src/main/java/com/ccsens/common/persist/dao/ProMemberDao.java b/common/src/main/java/com/ccsens/common/persist/dao/ProMemberDao.java index 3885dba1..48af5fac 100644 --- a/common/src/main/java/com/ccsens/common/persist/dao/ProMemberDao.java +++ b/common/src/main/java/com/ccsens/common/persist/dao/ProMemberDao.java @@ -1,6 +1,7 @@ package com.ccsens.common.persist.dao; import com.ccsens.common.bean.vo.CDeliverVo; +import com.ccsens.common.bean.vo.CMemberVo; import com.ccsens.common.persist.mapper.ProMemberMapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -34,4 +35,19 @@ public interface ProMemberDao extends ProMemberMapper { * @return 检查人列表 */ List queryChecker(@Param("projectId") Long projectId); + + /** + * 通过项目id和userId查找成员id和成员名 + * @param projectId 项目id + * @param userId userId + * @return 返回成员id和成员名 + */ + CMemberVo.MemberIdAndName getByUserIdAndProjectId(@Param("projectId")Long projectId, @Param("userId")Long userId); + + /** + * 通过成员id批量查询userId + * @param memberIdList 成员id数组 + * @return 返回所有成员的userId + */ + List queryUserIdByMemberId(@Param("memberIdList")List memberIdList); } diff --git a/common/src/main/java/com/ccsens/common/persist/dao/ProRoleDao.java b/common/src/main/java/com/ccsens/common/persist/dao/ProRoleDao.java index 88becee6..e0ee8b77 100644 --- a/common/src/main/java/com/ccsens/common/persist/dao/ProRoleDao.java +++ b/common/src/main/java/com/ccsens/common/persist/dao/ProRoleDao.java @@ -110,4 +110,11 @@ public interface ProRoleDao extends ProRoleMapper { * @return 可见角色列表 */ List queryRoleByLevel(@Param("projectId") Long projectId,@Param("level") Integer level); + + /** + * 通过任务详情id获取角色id + * @param taskDetailId 任务详情id + * @return 角色id + */ + Long getRoleIdByTaskDetailId(@Param("taskDetailId") Long taskDetailId); } diff --git a/common/src/main/java/com/ccsens/common/service/DeliverService.java b/common/src/main/java/com/ccsens/common/service/DeliverService.java index 37f0bd20..43705355 100644 --- a/common/src/main/java/com/ccsens/common/service/DeliverService.java +++ b/common/src/main/java/com/ccsens/common/service/DeliverService.java @@ -4,23 +4,34 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; import com.ccsens.common.bean.dto.CDeliverDto; +import com.ccsens.common.bean.message.DeliverMessageWithChecker; +import com.ccsens.common.bean.message.DeliverMessageWithUpload; import com.ccsens.common.bean.po.ProDeliver; import com.ccsens.common.bean.po.ProDeliverChecker; +import com.ccsens.common.bean.po.ProMember; import com.ccsens.common.bean.po.ProTaskSub; import com.ccsens.common.bean.vo.CDeliverVo; +import com.ccsens.common.bean.vo.CMemberVo; import com.ccsens.common.bean.vo.CProjectVo; import com.ccsens.common.persist.dao.*; import com.ccsens.common.util.CommonCodeError; +import com.ccsens.util.JacksonUtil; +import com.ccsens.util.bean.message.common.InMessage; +import com.ccsens.util.bean.message.common.MessageConstant; +import com.ccsens.util.config.RabbitMQConfig; import com.ccsens.util.exception.BaseException; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.AmqpTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author AUSU @@ -48,6 +59,8 @@ public class DeliverService implements IDeliverService{ private ProRoleMemberDao roleMemberDao; @Resource private Snowflake snowflake; + @Resource + private AmqpTemplate rabbitTemplate; @Override public List queryChecker(CDeliverDto.QueryChecker params, Long userId) { @@ -56,7 +69,7 @@ public class DeliverService implements IDeliverService{ @Override - public void saveDeliver(CDeliverDto.SaveDeliver params, Long userId) { + public void saveDeliver(CDeliverDto.SaveDeliver params, Long userId) throws Exception { if (CollectionUtil.isEmpty(params.getCheckerList())) { throw new BaseException(CommonCodeError.CHECKER_DONT_NULL); } @@ -100,6 +113,37 @@ public class DeliverService implements IDeliverService{ deliverCheckerDao.insertSelective(deliverChecker); } //TODO 发送消息 + sendToDeliverUploadMessage(params, userId, taskSub.getTaskDetailId(), proDeliver.getId()); + } + + public void sendToDeliverUploadMessage(CDeliverDto.SaveDeliver params, Long userId, Long taskDetailId, Long deliverId) throws Exception { + //获取任务所属的角色id + Long roleId = roleDao.getRoleIdByTaskDetailId(taskDetailId); + //获取成员id和成员名 + CMemberVo.MemberIdAndName memberIdAndName = memberDao.getByUserIdAndProjectId(params.getProjectId(), userId); + Long memberId = null; + String memberName = null; + if(ObjectUtil.isNotNull(memberIdAndName)){ + memberId = memberIdAndName.getId(); + memberName = memberIdAndName.getName(); + } + //发送的消息内容 + DeliverMessageWithUpload message = new DeliverMessageWithUpload(params.getTaskSubId(), + taskDetailId,deliverId,roleId,memberId,memberName); + //通过成员id批量获取userId + List userIdList = memberDao.queryUserIdByMemberId(params.getCheckerList()); + if(CollectionUtil.isNotEmpty(userIdList)){ + //获取接受者的userId + Set userIdSet = new HashSet<>(userIdList); + //封装成inMessage + InMessage inMessage = new InMessage(); + inMessage.setToDomain(MessageConstant.DomainType.User); + inMessage.setTos(userIdSet); + inMessage.setData(JacksonUtil.beanToJson(message)); + log.info("发送消息--上传交付物--:{}",inMessage); + rabbitTemplate.convertAndSend(RabbitMQConfig.MESSAGE_QUEUE_NAME, + JacksonUtil.beanToJson(inMessage)); + } } @@ -129,7 +173,7 @@ public class DeliverService implements IDeliverService{ @Override - public void checkDeliver(CDeliverDto.CheckDeliver params, Long userId) { + public void checkDeliver(CDeliverDto.CheckDeliver params, Long userId) throws Exception { Long userOfMemberId = memberDao.findUserOfMemberId(params.getProjectId(), userId); ProDeliverChecker deliverChecker = deliverCheckerDao.selectByPrimaryKey(params.getCheckId()); if (!userOfMemberId.equals(deliverChecker.getMemberId())) { @@ -142,6 +186,48 @@ public class DeliverService implements IDeliverService{ deliverCheck.setScore(params.getScore()); deliverCheckerDao.updateByPrimaryKeySelective(deliverCheck); //TODO 发送消息 + sendToDeliverCheckerMessage(deliverChecker.getDeliverId(),params.getProjectId(),userId); + } + + private void sendToDeliverCheckerMessage(Long deliverId, Long projectId, Long userId) throws Exception { + Long subTaskId = null; + Long taskDetailId = null; + Long roleId = null; + Long memberId = null; + String memberName = null; + //获取任务信息 + ProDeliver deliver = deliverDao.selectByPrimaryKey(deliverId); + if(ObjectUtil.isNotNull(deliver)){ + subTaskId = deliver.getTaskSubId(); + ProTaskSub taskSub = taskSubDao.selectByPrimaryKey(deliver.getTaskSubId()); + if(ObjectUtil.isNotNull(taskSub)){ + taskDetailId = taskSub.getTaskDetailId(); + //获取任务所属的角色id + roleId = roleDao.getRoleIdByTaskDetailId(taskDetailId); + } + } + //获取成员id和成员名 + CMemberVo.MemberIdAndName memberIdAndName = memberDao.getByUserIdAndProjectId(projectId, userId); + if(ObjectUtil.isNotNull(memberIdAndName)){ + memberId = memberIdAndName.getId(); + memberName = memberIdAndName.getName(); + } + //发送的消息内容 + DeliverMessageWithChecker checkerMessage = new DeliverMessageWithChecker(subTaskId,taskDetailId,deliverId,roleId,memberId,memberName); + //获取上传者的userId(消息接收者) + ProMember uploadMember = memberDao.selectByPrimaryKey(deliver.getMemberId()); + if(ObjectUtil.isNotNull(uploadMember)){ + Set userIdSet = new HashSet<>(); + userIdSet.add(uploadMember.getUserId().toString()); + //封装成inMessage + InMessage inMessage = new InMessage(); + inMessage.setToDomain(MessageConstant.DomainType.User); + inMessage.setTos(userIdSet); + inMessage.setData(JacksonUtil.beanToJson(checkerMessage)); + log.info("发送消息--检查交付物--:{}",inMessage); + rabbitTemplate.convertAndSend(RabbitMQConfig.MESSAGE_QUEUE_NAME, + JacksonUtil.beanToJson(inMessage)); + } } diff --git a/common/src/main/java/com/ccsens/common/service/IDeliverService.java b/common/src/main/java/com/ccsens/common/service/IDeliverService.java index 70925109..59add006 100644 --- a/common/src/main/java/com/ccsens/common/service/IDeliverService.java +++ b/common/src/main/java/com/ccsens/common/service/IDeliverService.java @@ -24,7 +24,7 @@ public interface IDeliverService { * @param params 项目id * @param userId 用户id */ - void saveDeliver(CDeliverDto.SaveDeliver params, Long userId); + void saveDeliver(CDeliverDto.SaveDeliver params, Long userId) throws Exception; /** * 查询任务的交付物历史记录 @@ -39,7 +39,7 @@ public interface IDeliverService { * @param params 检查记录id * @param userId 当前登录用户 */ - void checkDeliver(CDeliverDto.CheckDeliver params, Long userId); + void checkDeliver(CDeliverDto.CheckDeliver params, Long userId) throws Exception; /** * 查询项目的交付物历史记录 diff --git a/common/src/main/resources/mapper_dao/ProMemberDao.xml b/common/src/main/resources/mapper_dao/ProMemberDao.xml index 64dc12f2..67c400db 100644 --- a/common/src/main/resources/mapper_dao/ProMemberDao.xml +++ b/common/src/main/resources/mapper_dao/ProMemberDao.xml @@ -33,5 +33,29 @@ rec_status = 0 AND project_id = #{projectId} - + + diff --git a/common/src/main/resources/mapper_dao/ProRoleDao.xml b/common/src/main/resources/mapper_dao/ProRoleDao.xml index fc1d09c7..082d62ce 100644 --- a/common/src/main/resources/mapper_dao/ProRoleDao.xml +++ b/common/src/main/resources/mapper_dao/ProRoleDao.xml @@ -219,5 +219,14 @@ AND project_id = #{projectId} AND l.`level` <= #{level} + \ No newline at end of file