| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- package jnpf.flowable.service.impl;
- import cn.hutool.core.collection.CollectionUtil;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.github.yulichang.extension.mapping.wrapper.MappingQuery;
- import jnpf.base.UserInfo;
- import jnpf.base.service.SuperServiceImpl;
- import jnpf.flowable.entity.CandidatesEntity;
- import jnpf.flowable.entity.OperatorEntity;
- import jnpf.flowable.entity.TemplateNodeEntity;
- import jnpf.flowable.mapper.CandidatesMapper;
- import jnpf.flowable.model.task.FlowModel;
- import jnpf.flowable.model.util.FlowNature;
- import jnpf.flowable.service.CandidatesService;
- import jnpf.flowable.service.OperatorService;
- import jnpf.util.RandomUtil;
- import jnpf.util.StringUtil;
- import jnpf.util.UserProvider;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- /**
- * 类的描述
- *
- * @author JNPF@YinMai Info. Co., Ltd
- * @version 5.0.x
- * @since 2024/4/18 16:03
- */
- @Service
- public class CandidatesServiceImpl extends SuperServiceImpl<CandidatesMapper, CandidatesEntity> implements CandidatesService {
- @Autowired
- private OperatorService operatorService;
- @Override
- public List<CandidatesEntity> getList(String taskId, String nodeCode) {
- QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
- if (StringUtil.isNotEmpty(taskId)) {
- queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId);
- }
- if (StringUtil.isNotEmpty(nodeCode)) {
- queryWrapper.lambda().eq(CandidatesEntity::getNodeCode, nodeCode);
- }
- return this.list(queryWrapper);
- }
- public List<CandidatesEntity> getListByCode(String taskId, String nodeCode) {
- QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId).eq(CandidatesEntity::getNodeCode, nodeCode);
- return this.list(queryWrapper);
- }
- @Override
- public void create(FlowModel fo, String taskId, List<TemplateNodeEntity> nodeEntityList, OperatorEntity operator) {
- UserInfo userInfo = UserProvider.getUser();
- // 候选人
- Map<String, List<String>> candidateList = fo.getCandidateList();
- for (String key : candidateList.keySet()) {
- TemplateNodeEntity nodeEntity = nodeEntityList.stream().filter(e -> e.getNodeCode().equals(key)).findFirst().orElse(null);
- if (null == nodeEntity) {
- continue;
- }
- // 删除原先的节点的候选人
- // this.delete(taskId, nodeEntity.getNodeCode());
- List<String> list = candidateList.get(key);
- this.create(taskId, nodeEntity, operator, userInfo, list, FlowNature.Candidates);
- }
- // 异常人
- Map<String, List<String>> errorRuleUserList = fo.getErrorRuleUserList();
- for (String key : errorRuleUserList.keySet()) {
- TemplateNodeEntity nodeEntity = nodeEntityList.stream().filter(e -> e.getNodeCode().equals(key)).findFirst().orElse(null);
- if (null == nodeEntity) {
- continue;
- }
- List<String> list = errorRuleUserList.get(key);
- this.create(taskId, nodeEntity, operator, userInfo, list, FlowNature.CandidatesError);
- }
- }
- public void create(String taskId, TemplateNodeEntity nodeEntity, OperatorEntity operator, UserInfo userInfo, List<String> list, Integer type) {
- CandidatesEntity entity = new CandidatesEntity();
- entity.setId(RandomUtil.uuId());
- entity.setTaskId(taskId);
- entity.setNodeCode(nodeEntity.getNodeCode());
- String nodeId = "";
- if (operator != null) {
- entity.setOperatorId(operator.getId());
- nodeId = operator.getNodeId();
- } else {
- entity.setOperatorId(FlowNature.ParentId);
- }
- List<CandidatesEntity> entityList = this.getListByCode(taskId, nodeEntity.getNodeCode());
- if (CollectionUtil.isNotEmpty(entityList)) {
- QueryWrapper<OperatorEntity> operatorWrapper = new QueryWrapper<>();
- operatorWrapper.lambda().eq(OperatorEntity::getTaskId, taskId).eq(OperatorEntity::getNodeId, nodeId);
- List<OperatorEntity> opList = operatorService.list(operatorWrapper);
- if (CollectionUtil.isNotEmpty(opList)) {
- List<String> opIds = opList.stream().map(OperatorEntity::getId).collect(Collectors.toList());
- List<CandidatesEntity> deleteList = entityList.stream()
- .filter(e -> !opIds.contains(e.getOperatorId())).collect(Collectors.toList());
- if (CollectionUtil.isNotEmpty(deleteList)) {
- this.removeByIds(deleteList);
- }
- }
- }
- entity.setAccount(userInfo.getUserAccount());
- entity.setHandleId(userInfo.getUserId());
- entity.setType(type);
- entity.setCandidates(String.join(",", list));
- this.save(entity);
- }
- public void delete(String taskId, String nodeCode) {
- QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId)
- .eq(CandidatesEntity::getNodeCode, nodeCode);
- List<CandidatesEntity> list = this.list(queryWrapper);
- if (CollectionUtil.isNotEmpty(list)) {
- this.removeByIds(list);
- }
- }
- @Override
- public void deleteByCodes(String taskId, List<String> nodeIds) {
- QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId);
- if (CollectionUtil.isNotEmpty(nodeIds)) {
- queryWrapper.lambda().in(CandidatesEntity::getNodeCode, nodeIds);
- }
- List<CandidatesEntity> list = this.list(queryWrapper);
- if (CollectionUtil.isNotEmpty(list)) {
- this.removeByIds(list);
- }
- }
- @Override
- public void delete(String taskId, List<String> nodeIds, List<String> userId) {
- QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId).in(CandidatesEntity::getHandleId, userId);
- if (CollectionUtil.isNotEmpty(nodeIds)) {
- queryWrapper.lambda().in(CandidatesEntity::getNodeCode, nodeIds);
- }
- List<CandidatesEntity> list = this.list(queryWrapper);
- if (CollectionUtil.isNotEmpty(list)) {
- this.removeByIds(list);
- }
- }
- @Override
- public List<String> getBranch(String taskId, String nodeCode) {
- List<String> resList = new ArrayList<>();
- QueryWrapper<CandidatesEntity> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CandidatesEntity::getTaskId, taskId).eq(CandidatesEntity::getNodeCode, nodeCode)
- .eq(CandidatesEntity::getType, FlowNature.Branch);
- List<CandidatesEntity> list = this.list(queryWrapper);
- if (CollectionUtil.isNotEmpty(list)) {
- for (CandidatesEntity entity : list) {
- if (StringUtil.isNotEmpty(entity.getCandidates())) {
- List<String> branch = Arrays.stream(entity.getCandidates().split(",")).collect(Collectors.toList());
- resList.addAll(branch);
- }
- }
- }
- return resList;
- }
- @Override
- public void createBranch(List<String> branchList, OperatorEntity operator) {
- if (CollectionUtil.isNotEmpty(branchList)) {
- this.deleteBranch(operator.getTaskId(), operator.getNodeCode());
- CandidatesEntity entity = new CandidatesEntity();
- entity.setId(RandomUtil.uuId());
- entity.setTaskId(operator.getTaskId());
- entity.setNodeCode(operator.getNodeCode());
- entity.setOperatorId(operator.getId());
- entity.setType(FlowNature.Branch);
- entity.setCandidates(String.join(",", branchList));
- this.save(entity);
- }
- }
- @Override
- public void deleteBranch(String taskId, String nodeCode) {
- QueryWrapper<CandidatesEntity> wrapper = new MappingQuery<>();
- wrapper.lambda().eq(CandidatesEntity::getTaskId, taskId).eq(CandidatesEntity::getNodeCode, nodeCode)
- .eq(CandidatesEntity::getType, FlowNature.Branch);
- this.remove(wrapper);
- }
- }
|