CandidatesServiceImpl.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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.github.yulichang.extension.mapping.wrapper.MappingQuery;
  5. import jnpf.base.UserInfo;
  6. import jnpf.base.service.SuperServiceImpl;
  7. import jnpf.flowable.entity.CandidatesEntity;
  8. import jnpf.flowable.entity.OperatorEntity;
  9. import jnpf.flowable.entity.TemplateNodeEntity;
  10. import jnpf.flowable.mapper.CandidatesMapper;
  11. import jnpf.flowable.model.task.FlowModel;
  12. import jnpf.flowable.model.util.FlowNature;
  13. import jnpf.flowable.service.CandidatesService;
  14. import jnpf.flowable.service.OperatorService;
  15. import jnpf.util.RandomUtil;
  16. import jnpf.util.StringUtil;
  17. import jnpf.util.UserProvider;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import java.util.ArrayList;
  21. import java.util.Arrays;
  22. import java.util.List;
  23. import java.util.Map;
  24. import java.util.stream.Collectors;
  25. /**
  26. * 类的描述
  27. *
  28. * @author JNPF@YinMai Info. Co., Ltd
  29. * @version 5.0.x
  30. * @since 2024/4/18 16:03
  31. */
  32. @Service
  33. public class CandidatesServiceImpl extends SuperServiceImpl<CandidatesMapper, CandidatesEntity> implements CandidatesService {
  34. @Autowired
  35. private OperatorService operatorService;
  36. @Override
  37. public List<CandidatesEntity> getList(String taskId, String nodeCode) {
  38. QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
  39. if (StringUtil.isNotEmpty(taskId)) {
  40. queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId);
  41. }
  42. if (StringUtil.isNotEmpty(nodeCode)) {
  43. queryWrapper.lambda().eq(CandidatesEntity::getNodeCode, nodeCode);
  44. }
  45. return this.list(queryWrapper);
  46. }
  47. public List<CandidatesEntity> getListByCode(String taskId, String nodeCode) {
  48. QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
  49. queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId).eq(CandidatesEntity::getNodeCode, nodeCode);
  50. return this.list(queryWrapper);
  51. }
  52. @Override
  53. public void create(FlowModel fo, String taskId, List<TemplateNodeEntity> nodeEntityList, OperatorEntity operator) {
  54. UserInfo userInfo = UserProvider.getUser();
  55. // 候选人
  56. Map<String, List<String>> candidateList = fo.getCandidateList();
  57. for (String key : candidateList.keySet()) {
  58. TemplateNodeEntity nodeEntity = nodeEntityList.stream().filter(e -> e.getNodeCode().equals(key)).findFirst().orElse(null);
  59. if (null == nodeEntity) {
  60. continue;
  61. }
  62. // 删除原先的节点的候选人
  63. // this.delete(taskId, nodeEntity.getNodeCode());
  64. List<String> list = candidateList.get(key);
  65. this.create(taskId, nodeEntity, operator, userInfo, list, FlowNature.Candidates);
  66. }
  67. // 异常人
  68. Map<String, List<String>> errorRuleUserList = fo.getErrorRuleUserList();
  69. for (String key : errorRuleUserList.keySet()) {
  70. TemplateNodeEntity nodeEntity = nodeEntityList.stream().filter(e -> e.getNodeCode().equals(key)).findFirst().orElse(null);
  71. if (null == nodeEntity) {
  72. continue;
  73. }
  74. List<String> list = errorRuleUserList.get(key);
  75. this.create(taskId, nodeEntity, operator, userInfo, list, FlowNature.CandidatesError);
  76. }
  77. }
  78. public void create(String taskId, TemplateNodeEntity nodeEntity, OperatorEntity operator, UserInfo userInfo, List<String> list, Integer type) {
  79. CandidatesEntity entity = new CandidatesEntity();
  80. entity.setId(RandomUtil.uuId());
  81. entity.setTaskId(taskId);
  82. entity.setNodeCode(nodeEntity.getNodeCode());
  83. String nodeId = "";
  84. if (operator != null) {
  85. entity.setOperatorId(operator.getId());
  86. nodeId = operator.getNodeId();
  87. } else {
  88. entity.setOperatorId(FlowNature.ParentId);
  89. }
  90. List<CandidatesEntity> entityList = this.getListByCode(taskId, nodeEntity.getNodeCode());
  91. if (CollectionUtil.isNotEmpty(entityList)) {
  92. QueryWrapper<OperatorEntity> operatorWrapper = new QueryWrapper<>();
  93. operatorWrapper.lambda().eq(OperatorEntity::getTaskId, taskId).eq(OperatorEntity::getNodeId, nodeId);
  94. List<OperatorEntity> opList = operatorService.list(operatorWrapper);
  95. if (CollectionUtil.isNotEmpty(opList)) {
  96. List<String> opIds = opList.stream().map(OperatorEntity::getId).collect(Collectors.toList());
  97. List<CandidatesEntity> deleteList = entityList.stream()
  98. .filter(e -> !opIds.contains(e.getOperatorId())).collect(Collectors.toList());
  99. if (CollectionUtil.isNotEmpty(deleteList)) {
  100. this.removeByIds(deleteList);
  101. }
  102. }
  103. }
  104. entity.setAccount(userInfo.getUserAccount());
  105. entity.setHandleId(userInfo.getUserId());
  106. entity.setType(type);
  107. entity.setCandidates(String.join(",", list));
  108. this.save(entity);
  109. }
  110. public void delete(String taskId, String nodeCode) {
  111. QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
  112. queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId)
  113. .eq(CandidatesEntity::getNodeCode, nodeCode);
  114. List<CandidatesEntity> list = this.list(queryWrapper);
  115. if (CollectionUtil.isNotEmpty(list)) {
  116. this.removeByIds(list);
  117. }
  118. }
  119. @Override
  120. public void deleteByCodes(String taskId, List<String> nodeIds) {
  121. QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
  122. queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId);
  123. if (CollectionUtil.isNotEmpty(nodeIds)) {
  124. queryWrapper.lambda().in(CandidatesEntity::getNodeCode, nodeIds);
  125. }
  126. List<CandidatesEntity> list = this.list(queryWrapper);
  127. if (CollectionUtil.isNotEmpty(list)) {
  128. this.removeByIds(list);
  129. }
  130. }
  131. @Override
  132. public void delete(String taskId, List<String> nodeIds, List<String> userId) {
  133. QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
  134. queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId).in(CandidatesEntity::getHandleId, userId);
  135. if (CollectionUtil.isNotEmpty(nodeIds)) {
  136. queryWrapper.lambda().in(CandidatesEntity::getNodeCode, nodeIds);
  137. }
  138. List<CandidatesEntity> list = this.list(queryWrapper);
  139. if (CollectionUtil.isNotEmpty(list)) {
  140. this.removeByIds(list);
  141. }
  142. }
  143. @Override
  144. public List<String> getBranch(String taskId, String nodeCode) {
  145. List<String> resList = new ArrayList<>();
  146. QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
  147. queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId).eq(CandidatesEntity::getNodeCode, nodeCode)
  148. .eq(CandidatesEntity::getType, FlowNature.Branch);
  149. List<CandidatesEntity> list = this.list(queryWrapper);
  150. if (CollectionUtil.isNotEmpty(list)) {
  151. for (CandidatesEntity entity : list) {
  152. if (StringUtil.isNotEmpty(entity.getCandidates())) {
  153. List<String> branch = Arrays.stream(entity.getCandidates().split(",")).collect(Collectors.toList());
  154. resList.addAll(branch);
  155. }
  156. }
  157. }
  158. return resList;
  159. }
  160. @Override
  161. public void createBranch(List<String> branchList, OperatorEntity operator) {
  162. if (CollectionUtil.isNotEmpty(branchList)) {
  163. this.deleteBranch(operator.getTaskId(), operator.getNodeCode());
  164. CandidatesEntity entity = new CandidatesEntity();
  165. entity.setId(RandomUtil.uuId());
  166. entity.setTaskId(operator.getTaskId());
  167. entity.setNodeCode(operator.getNodeCode());
  168. entity.setOperatorId(operator.getId());
  169. entity.setType(FlowNature.Branch);
  170. entity.setCandidates(String.join(",", branchList));
  171. this.save(entity);
  172. }
  173. }
  174. @Override
  175. public void deleteBranch(String taskId, String nodeCode) {
  176. QueryWrapper<CandidatesEntity> wrapper = new MappingQuery<>();
  177. wrapper.lambda().eq(CandidatesEntity::getTaskId, taskId).eq(CandidatesEntity::getNodeCode, nodeCode)
  178. .eq(CandidatesEntity::getType, FlowNature.Branch);
  179. this.remove(wrapper);
  180. }
  181. }