package jnpf.flowable.controller; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import jnpf.base.ActionResult; import jnpf.constant.MsgCode; import jnpf.constant.PermissionConst; import jnpf.exception.WorkFlowException; import jnpf.flowable.entity.*; import jnpf.flowable.enums.NodeEnum; import jnpf.flowable.enums.OperatorStateEnum; import jnpf.flowable.model.task.FileModel; import jnpf.flowable.model.task.FlowModel; import jnpf.flowable.model.task.TaskTo; import jnpf.flowable.model.templatenode.nodejson.FileConfig; import jnpf.flowable.model.templatenode.nodejson.NodeModel; import jnpf.flowable.model.util.FlowNature; import jnpf.flowable.service.*; import jnpf.flowable.util.OperatorUtil; import jnpf.flowable.util.RecordUtil; import jnpf.flowable.util.TaskUtil; import jnpf.util.DateUtil; import jnpf.util.JsonUtil; import jnpf.util.StringUtil; import jnpf.workflow.service.TaskApi; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; /** * 类的描述 * * @author JNPF@YinMai Info. Co., Ltd * @version 5.0.x * @since 2024/5/28 14:32 */ @Component public class TaskForFileController implements TaskApi { @Autowired private TaskService taskService; @Autowired private OperatorService operatorService; @Autowired private TemplateNodeService templateNodeService; @Autowired private RecordUtil recordUtil; @Autowired private OperatorUtil operatorUtil; @Autowired private LaunchUserService launchUserService; @Autowired private TaskUtil taskUtil; // 获取归档信息 @Override public FileModel getFileModel(String taskId) throws WorkFlowException { TaskEntity taskEntity = taskService.getInfo(taskId); if (null == taskEntity) { throw new WorkFlowException(MsgCode.FA001.get()); } FileModel model = new FileModel(); List nodeEntityList = templateNodeService.getList(taskEntity.getFlowId()); TemplateNodeEntity globalEntity = nodeEntityList.stream().filter(e -> StringUtil.equals(NodeEnum.global.getType(), e.getNodeType())).findFirst().orElse(new TemplateNodeEntity()); NodeModel global = JsonUtil.getJsonToBean(globalEntity.getNodeJson(), NodeModel.class); if (null != global) { FileConfig fileConfig = global.getFileConfig(); // 归档路径 model.setParentId(fileConfig.getParentId()); String userId = taskEntity.getCreatorUserId(); if (fileConfig.getPermissionType().equals(FlowNature.FlowAll)) { // 创建人 model.setUserId(userId); // 分享人 List list = operatorUtil.getListOfFile(taskId); List userList = new ArrayList<>(); for (String id : list){ if (!id.equals(userId)) { userList.add(id + "--"+ PermissionConst.USER); } } model.setUserList(userList); } else if (fileConfig.getPermissionType().equals(FlowNature.FlowLast)) { // 最后节点审批人 List list = operatorUtil.getListOfLast(taskId); if (CollectionUtil.isNotEmpty(list)) { model.setUserId(list.get(0)); list.remove(0); if (CollectionUtil.isNotEmpty(list)) { List userList = new ArrayList<>(); for (String id : list){ userList.add(id + "--"+ PermissionConst.USER); } model.setUserList(userList); } } else { model.setUserId(userId); } } else { // 创建人 model.setUserId(userId); } } // 文件名称 String filename = taskEntity.getFullName(); String datetime; if (null != taskEntity.getEndTime()) { datetime = DateUtil.dateToString(taskEntity.getEndTime(), "yyyyMMddHHmmss"); } else { datetime = DateUtil.dateToString(new Date(), "yyyyMMddHHmmss"); } filename += "-" + datetime; model.setFilename(filename + ".pdf"); return model; } @Override public TaskEntity getInfoSubmit(String id, SFunction... columns) { return taskService.getInfoSubmit(id, columns); } @Override public List getInfosSubmit(String[] ids, SFunction... columns) { return taskService.getInfosSubmit(ids, columns); } @Override public void delete(TaskEntity taskEntity) throws Exception { taskService.delete(taskEntity.getId()); } @Override public void saveOrSubmit(FlowModel flowModel) throws Exception { taskService.batchSaveOrSubmit(flowModel); } @Override public List getRecordList(String taskId) { return recordUtil.getList(taskId); } @Override public void updateIsFile(String taskId) { try { taskService.updateIsFile(taskId); } catch (WorkFlowException e) { System.out.println(e.getMessage()); } } @Override public Boolean checkSign() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(OperatorEntity::getCompletion, FlowNature.Normal) .ne(OperatorEntity::getStatus, OperatorStateEnum.Futility.getCode()) .isNull(OperatorEntity::getSignTime); long count = operatorService.count(queryWrapper); return count > 0; } @Override public Boolean checkTodo() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(OperatorEntity::getCompletion, FlowNature.Normal) .ne(OperatorEntity::getStatus, OperatorStateEnum.Futility.getCode()) .isNotNull(OperatorEntity::getSignTime).isNull(OperatorEntity::getStartHandleTime); long count = operatorService.count(queryWrapper); return count > 0; } @Override public ActionResult launchFlow(FlowModel flowModel) { try { return taskUtil.launchFlow(flowModel); } catch (Exception e) { e.printStackTrace(); return ActionResult.fail(e.getMessage()); } } @Override public TaskTo getFlowTodoCount(TaskTo taskTo) { return taskService.getFlowTodoCount(taskTo); } @Override public List getStepList() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(LaunchUserEntity::getType,FlowNature.StepInitiation); List list = launchUserService.list(queryWrapper); List stepList = new ArrayList<>(); for (LaunchUserEntity entity : list){ String organizeId = entity.getOrganizeId(); if (StringUtil.isNotEmpty(organizeId)){ stepList.addAll(Arrays.asList(organizeId.split(","))); } String positionId = entity.getPositionId(); if (StringUtil.isNotEmpty(positionId)){ stepList.addAll(Arrays.asList(positionId.split(","))); } } return stepList; } }