| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package jnpf.flowable.util;
- import cn.hutool.core.util.ObjectUtil;
- import jnpf.exception.WorkFlowException;
- import jnpf.flowable.entity.CirculateEntity;
- import jnpf.flowable.entity.OperatorEntity;
- import jnpf.flowable.entity.TaskEntity;
- import jnpf.flowable.entity.TemplateNodeEntity;
- import jnpf.flowable.enums.RecordEnum;
- import jnpf.flowable.model.task.FlowMethod;
- import jnpf.flowable.model.task.FlowModel;
- import jnpf.flowable.model.templatenode.nodejson.NodeModel;
- import jnpf.flowable.model.util.FlowNature;
- import jnpf.flowable.service.CirculateService;
- import jnpf.permission.entity.UserEntity;
- import jnpf.permission.entity.UserRelationEntity;
- import jnpf.util.JsonUtil;
- import jnpf.util.RandomUtil;
- import jnpf.util.StringUtil;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * @author :JNPF开发平台组
- * @version: V3.1.0
- * @copyright 引迈信息技术有限公司
- * @date :2024/4/29 下午3:12
- */
- @Component
- public class CirculateUtil {
- @Autowired
- private ServiceUtil serviceUtil;
- @Autowired
- private TaskUtil taskUtil;
- @Autowired
- private CirculateService circulateService;
- public List<CirculateEntity> circulateList(FlowMethod flowMethod) throws WorkFlowException {
- FlowModel flowModel = flowMethod.getFlowModel();
- List<CirculateEntity> circulateList = new ArrayList<>();
- TaskEntity task = flowMethod.getTaskEntity();
- OperatorEntity operator = flowMethod.getOperatorEntity();
- TemplateNodeEntity nodeEntity = flowMethod.getNodeEntity();
- NodeModel nodeModel = JsonUtil.getJsonToBean(nodeEntity.getNodeJson(), NodeModel.class);
- List<String> userIdAll = new ArrayList<>();
- //附加规则
- if (!ObjectUtil.equals(flowMethod.getType(), RecordEnum.reject.getCode())) {
- userIdAll = serviceUtil.getUserListAll(nodeModel.getCirculateUser());
- taskUtil.rule(userIdAll, task.getId(), nodeModel.getExtraCopyRule());
- }
- //指定传阅人
- userIdAll.addAll(Arrays.asList(StringUtil.isNotEmpty(flowModel.getCopyIds()) ? flowModel.getCopyIds().split(",") : new String[]{}));
- //抄送自己
- if (nodeModel.getIsInitiatorCopy()) {
- userIdAll.add(task.getCreatorUserId());
- }
- //抄送表单变量
- if (nodeModel.getIsFormFieldCopy()) {
- flowMethod.setIsAssign(false);
- Map<String, Object> dataAll = taskUtil.createOrUpdate(flowMethod);
- Object data = dataAll.get(nodeModel.getCopyFormField() + FlowNature.FORM_FIELD_SUFFIX);
- if (data != null) {
- List<String> list = new ArrayList<>();
- try {
- list.addAll(JsonUtil.getJsonToList(String.valueOf(data), String.class));
- } catch (Exception e) {}
- if (data instanceof List) {
- list.addAll((List) data);
- } else {
- list.addAll(Arrays.asList(String.valueOf(data).split(",")));
- }
- List<String> id = new ArrayList<>();
- for (String s : list) {
- id.add(s.split("--")[0]);
- }
- List<UserRelationEntity> listByObjectIdAll = serviceUtil.getListByObjectIdAll(id);
- List<String> userList = serviceUtil.getUserListAll(list);
- List<String> userPosition = listByObjectIdAll.stream().map(UserRelationEntity::getUserId).collect(Collectors.toList());
- List<String> handleIdAll = new ArrayList<>();
- handleIdAll.addAll(userPosition);
- handleIdAll.addAll(id);
- handleIdAll.addAll(userList);
- userIdAll.addAll(handleIdAll);
- }
- }
- //获取最新用户
- List<UserEntity> userList = serviceUtil.getUserName(userIdAll, true);
- for (UserEntity userEntity : userList) {
- CirculateEntity circulate = new CirculateEntity();
- circulate.setId(RandomUtil.uuId());
- circulate.setUserId(userEntity.getId());
- circulate.setNodeCode(nodeModel.getNodeId());
- circulate.setNodeName(nodeModel.getNodeName());
- circulate.setTaskId(task.getId());
- circulate.setCirculateRead(0);
- circulate.setOperatorId(operator.getId());
- circulate.setNodeId(operator.getNodeId());
- circulate.setCreatorTime(new Date());
- circulateList.add(circulate);
- }
- circulateService.saveBatch(circulateList);
- return circulateList;
- }
- }
|