CommentServiceImpl.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. package jnpf.flowable.service.impl;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import jnpf.base.UserInfo;
  7. import jnpf.base.service.SuperServiceImpl;
  8. import jnpf.exception.WorkFlowException;
  9. import jnpf.flowable.entity.*;
  10. import jnpf.flowable.enums.NodeEnum;
  11. import jnpf.flowable.mapper.CommentMapper;
  12. import jnpf.flowable.model.comment.CommentPagination;
  13. import jnpf.flowable.model.message.FlowMsgModel;
  14. import jnpf.flowable.model.task.FlowModel;
  15. import jnpf.flowable.model.task.TaskUserListModel;
  16. import jnpf.flowable.model.templatenode.nodejson.MsgConfig;
  17. import jnpf.flowable.model.templatenode.nodejson.NodeModel;
  18. import jnpf.flowable.service.CommentService;
  19. import jnpf.flowable.service.TaskService;
  20. import jnpf.flowable.util.MsgUtil;
  21. import jnpf.flowable.util.ServiceUtil;
  22. import jnpf.flowable.util.TaskUtil;
  23. import jnpf.permission.entity.UserEntity;
  24. import jnpf.util.JsonUtil;
  25. import jnpf.util.RandomUtil;
  26. import jnpf.util.StringUtil;
  27. import jnpf.util.UserProvider;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.stereotype.Service;
  30. import java.util.ArrayList;
  31. import java.util.Date;
  32. import java.util.List;
  33. import java.util.regex.Matcher;
  34. import java.util.regex.Pattern;
  35. import java.util.stream.Collectors;
  36. /**
  37. * 流程评论
  38. *
  39. * @author JNPF开发平台组
  40. * @version V3.1.0
  41. * @copyright 引迈信息技术有限公司
  42. */
  43. @Service
  44. public class CommentServiceImpl extends SuperServiceImpl<CommentMapper, CommentEntity> implements CommentService {
  45. @Autowired
  46. private MsgUtil msgUtil;
  47. @Autowired
  48. private TaskUtil taskUtil;
  49. @Autowired
  50. private ServiceUtil serviceUtil;
  51. @Autowired
  52. private TaskService taskService;
  53. @Override
  54. public List<CommentEntity> getlist(CommentPagination pagination) {
  55. QueryWrapper<CommentEntity> queryWrapper = new QueryWrapper<>();
  56. queryWrapper.lambda().eq(CommentEntity::getTaskId, pagination.getTaskId());
  57. queryWrapper.lambda().isNull(CommentEntity::getDeleteMark);
  58. queryWrapper.lambda().orderByDesc(CommentEntity::getCreatorTime);
  59. Page<CommentEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
  60. IPage<CommentEntity> userIPage = this.page(page, queryWrapper);
  61. return pagination.setData(userIPage.getRecords(), page.getTotal());
  62. }
  63. @Override
  64. public List<CommentEntity> getList() {
  65. QueryWrapper<CommentEntity> queryWrapper = new QueryWrapper<>();
  66. return this.list(queryWrapper);
  67. }
  68. @Override
  69. public List<CommentEntity> getlist(List<String> idList) {
  70. List<CommentEntity> list = new ArrayList<>();
  71. if (!idList.isEmpty()) {
  72. QueryWrapper<CommentEntity> queryWrapper = new QueryWrapper<>();
  73. queryWrapper.lambda().in(CommentEntity::getId, idList);
  74. list.addAll(this.list(queryWrapper));
  75. }
  76. return list;
  77. }
  78. @Override
  79. public CommentEntity getInfo(String id) {
  80. QueryWrapper<CommentEntity> queryWrapper = new QueryWrapper<>();
  81. queryWrapper.lambda().eq(CommentEntity::getId, id);
  82. return this.getOne(queryWrapper);
  83. }
  84. @Override
  85. public void create(CommentEntity entity) throws WorkFlowException {
  86. entity.setCreatorTime(new Date());
  87. entity.setCreatorUserId(UserProvider.getUser().getUserId());
  88. entity.setId(RandomUtil.uuId());
  89. if (this.save(entity)) {
  90. this.sendMsg(entity);
  91. }
  92. }
  93. // 发送评论消息
  94. public void sendMsg(CommentEntity entity) throws WorkFlowException {
  95. FlowModel flowModel = new FlowModel();
  96. taskUtil.setFlowModel(entity.getTaskId(), flowModel);
  97. TaskEntity taskEntity = flowModel.getTaskEntity();
  98. List<TemplateNodeEntity> nodeEntityList = flowModel.getNodeEntityList();
  99. TemplateNodeEntity start = nodeEntityList.stream()
  100. .filter(e -> e.getNodeType().equals(NodeEnum.start.getType())).findFirst().orElse(null);
  101. if (null == start) {
  102. return;
  103. }
  104. // 开始节点的评论配置
  105. NodeModel startNode = JsonUtil.getJsonToBean(start.getNodeJson(), NodeModel.class);
  106. MsgConfig commentMsgConfig = startNode.getCommentMsgConfig();
  107. if (commentMsgConfig.getOn() != 1 && commentMsgConfig.getOn() != 3) {
  108. return;
  109. }
  110. String text = entity.getText();
  111. // 不包含@{ 且 回复ID为空(不发消息)
  112. if (StringUtil.isBlank(text) || !text.contains("@{") && StringUtil.isBlank(entity.getReplyId())) {
  113. return;
  114. }
  115. List<String> userIds = new ArrayList<>();
  116. // 回复的人
  117. if (StringUtil.isNotEmpty(entity.getReplyId())) {
  118. CommentEntity reply = this.getInfo(entity.getReplyId());
  119. if (reply != null) {
  120. userIds.add(reply.getCreatorUserId());
  121. }
  122. }
  123. String regex = "@\\{([^}]*)\\}";
  124. Pattern pattern = Pattern.compile(regex);
  125. List<String> userNameList = new ArrayList<>();
  126. Matcher matcher = pattern.matcher(text);
  127. while (matcher.find()) {
  128. String group = matcher.group();
  129. userNameList.add(group.substring(2, group.length() - 1));
  130. }
  131. // 获取@的人的account
  132. List<String> accountList = new ArrayList<>();
  133. if (CollectionUtil.isNotEmpty(userNameList)) {
  134. for (String userName : userNameList) {
  135. String[] split = userName.split("/");
  136. if (split.length >= 2) {
  137. String account = split[split.length - 1];
  138. accountList.add(account);
  139. }
  140. }
  141. }
  142. List<UserEntity> userList = serviceUtil.getUserByAccount(accountList.stream().distinct().collect(Collectors.toList()));
  143. List<String> ids = userList.stream().map(UserEntity::getId).collect(Collectors.toList());
  144. userIds.addAll(ids);
  145. // 过滤自己
  146. String userId = UserProvider.getLoginUserId();
  147. userIds = userIds.stream().filter(e -> !e.equals(userId)).distinct().collect(Collectors.toList());
  148. if (userIds.isEmpty()) {
  149. return;
  150. }
  151. List<OperatorEntity> operatorList = new ArrayList<>();
  152. List<CirculateEntity> circulateList = new ArrayList<>();
  153. List<String> userIdList = new ArrayList<>(userIds);
  154. TaskUserListModel model = taskService.getTaskUserList(taskEntity.getId());
  155. // 经办
  156. for (OperatorEntity operator : model.getOperatorList()) {
  157. String handleId = operator.getHandleId();
  158. if (userIdList.contains(handleId)) {
  159. operatorList.add(operator);
  160. userIdList.remove(handleId);
  161. }
  162. }
  163. // 抄送
  164. if (!userIdList.isEmpty()) {
  165. for (CirculateEntity circulate : model.getCirculateList()) {
  166. String circulateUserId = circulate.getUserId();
  167. if (userIdList.contains(circulateUserId)) {
  168. circulateList.add(circulate);
  169. userIdList.remove(circulateUserId);
  170. }
  171. }
  172. }
  173. // 发起人
  174. boolean startHandleId = false;
  175. if (!userIdList.isEmpty()) {
  176. if (userIdList.contains(taskEntity.getCreatorUserId())) {
  177. startHandleId = true;
  178. }
  179. }
  180. // 消息
  181. FlowMsgModel flowMsgModel = new FlowMsgModel();
  182. flowMsgModel.setNodeList(flowModel.getNodeEntityList());
  183. flowMsgModel.setCirculateList(circulateList);
  184. flowMsgModel.setFlowModel(flowModel);
  185. flowMsgModel.setTaskEntity(taskEntity);
  186. flowMsgModel.setOperatorList(operatorList);
  187. flowMsgModel.setStartHandId(startHandleId);
  188. flowMsgModel.setComment(true);
  189. flowMsgModel.setWait(false);
  190. msgUtil.message(flowMsgModel);
  191. }
  192. @Override
  193. public void update(String id, CommentEntity entity) {
  194. entity.setId(id);
  195. this.updateById(entity);
  196. }
  197. @Override
  198. public void delete(CommentEntity entity, boolean delComment) {
  199. if (entity != null) {
  200. UserInfo userInfo = UserProvider.getUser();
  201. if (delComment) {
  202. entity.setDeleteShow(1);
  203. } else {
  204. entity.setDeleteMark(1);
  205. }
  206. entity.setDeleteTime(new Date());
  207. entity.setDeleteUserId(userInfo.getUserId());
  208. this.updateById(entity);
  209. }
  210. }
  211. }