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 circulateList(FlowMethod flowMethod) throws WorkFlowException { FlowModel flowModel = flowMethod.getFlowModel(); List circulateList = new ArrayList<>(); TaskEntity task = flowMethod.getTaskEntity(); OperatorEntity operator = flowMethod.getOperatorEntity(); TemplateNodeEntity nodeEntity = flowMethod.getNodeEntity(); NodeModel nodeModel = JsonUtil.getJsonToBean(nodeEntity.getNodeJson(), NodeModel.class); List 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 dataAll = taskUtil.createOrUpdate(flowMethod); Object data = dataAll.get(nodeModel.getCopyFormField() + FlowNature.FORM_FIELD_SUFFIX); if (data != null) { List 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 id = new ArrayList<>(); for (String s : list) { id.add(s.split("--")[0]); } List listByObjectIdAll = serviceUtil.getListByObjectIdAll(id); List userList = serviceUtil.getUserListAll(list); List userPosition = listByObjectIdAll.stream().map(UserRelationEntity::getUserId).collect(Collectors.toList()); List handleIdAll = new ArrayList<>(); handleIdAll.addAll(userPosition); handleIdAll.addAll(id); handleIdAll.addAll(userList); userIdAll.addAll(handleIdAll); } } //获取最新用户 List 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; } }