update 调整驳回
This commit is contained in:
parent
0e530feee4
commit
1adffe70f3
@ -9,6 +9,8 @@ import org.dromara.workflow.domain.bo.FlowTaskBo;
|
|||||||
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
||||||
import org.dromara.workflow.domain.vo.FlowTaskVo;
|
import org.dromara.workflow.domain.vo.FlowTaskVo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务信息Mapper接口
|
* 任务信息Mapper接口
|
||||||
@ -25,8 +27,15 @@ public interface FlwTaskMapper {
|
|||||||
* @param queryWrapper 条件
|
* @param queryWrapper 条件
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
Page<FlowTaskVo> getTaskWaitByPage(@Param("page") Page<FlowTaskVo> page, @Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper);
|
Page<FlowTaskVo> getListRunTask(@Param("page") Page<FlowTaskVo> page, @Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取待办信息
|
||||||
|
*
|
||||||
|
* @param queryWrapper 条件
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
List<FlowTaskVo> getListRunTask(@Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper);
|
||||||
/**
|
/**
|
||||||
* 获取已办
|
* 获取已办
|
||||||
*
|
*
|
||||||
@ -34,7 +43,7 @@ public interface FlwTaskMapper {
|
|||||||
* @param queryWrapper 条件
|
* @param queryWrapper 条件
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
Page<FlowHisTaskVo> getTaskFinishByPage(@Param("page") Page<FlowTaskVo> page, @Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper);
|
Page<FlowHisTaskVo> getListFinishTask(@Param("page") Page<FlowTaskVo> page, @Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询当前用户的抄送
|
* 查询当前用户的抄送
|
||||||
|
@ -22,23 +22,16 @@ import org.dromara.warm.flow.core.constant.ExceptionCons;
|
|||||||
import org.dromara.warm.flow.core.dto.FlowParams;
|
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||||
import org.dromara.warm.flow.core.entity.Definition;
|
import org.dromara.warm.flow.core.entity.Definition;
|
||||||
import org.dromara.warm.flow.core.entity.Instance;
|
import org.dromara.warm.flow.core.entity.Instance;
|
||||||
import org.dromara.warm.flow.core.entity.Node;
|
|
||||||
import org.dromara.warm.flow.core.entity.Task;
|
import org.dromara.warm.flow.core.entity.Task;
|
||||||
import org.dromara.warm.flow.core.enums.NodeType;
|
import org.dromara.warm.flow.core.enums.NodeType;
|
||||||
import org.dromara.warm.flow.core.enums.SkipType;
|
|
||||||
import org.dromara.warm.flow.core.service.DefService;
|
import org.dromara.warm.flow.core.service.DefService;
|
||||||
import org.dromara.warm.flow.core.service.InsService;
|
import org.dromara.warm.flow.core.service.InsService;
|
||||||
import org.dromara.warm.flow.core.service.NodeService;
|
|
||||||
import org.dromara.warm.flow.core.service.TaskService;
|
import org.dromara.warm.flow.core.service.TaskService;
|
||||||
import org.dromara.warm.flow.core.utils.AssertUtil;
|
|
||||||
import org.dromara.warm.flow.orm.entity.FlowHisTask;
|
import org.dromara.warm.flow.orm.entity.FlowHisTask;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowInstance;
|
import org.dromara.warm.flow.orm.entity.FlowInstance;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowNode;
|
|
||||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
|
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
|
import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
|
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
|
||||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||||
import org.dromara.workflow.domain.bo.FlowCancelBo;
|
import org.dromara.workflow.domain.bo.FlowCancelBo;
|
||||||
import org.dromara.workflow.domain.bo.FlowInstanceBo;
|
import org.dromara.workflow.domain.bo.FlowInstanceBo;
|
||||||
@ -69,12 +62,9 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
private final InsService insService;
|
private final InsService insService;
|
||||||
private final DefService defService;
|
private final DefService defService;
|
||||||
private final FlowHisTaskMapper flowHisTaskMapper;
|
private final FlowHisTaskMapper flowHisTaskMapper;
|
||||||
private final FlowTaskMapper flowTaskMapper;
|
|
||||||
private final FlowInstanceMapper flowInstanceMapper;
|
private final FlowInstanceMapper flowInstanceMapper;
|
||||||
private final FlwInstanceMapper flwInstanceMapper;
|
private final FlwInstanceMapper flwInstanceMapper;
|
||||||
private final TaskService taskService;
|
private final TaskService taskService;
|
||||||
private final FlowNodeMapper flowNodeMapper;
|
|
||||||
private final NodeService nodeService;
|
|
||||||
private final IFlwTaskService flwTaskService;
|
private final IFlwTaskService flwTaskService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -206,9 +196,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
if (CollUtil.isNotEmpty(currentTaskList)) {
|
if (CollUtil.isNotEmpty(currentTaskList)) {
|
||||||
if (currentTaskList.size() > 1) {
|
if (currentTaskList.size() > 1) {
|
||||||
currentTaskList.remove(0);
|
currentTaskList.remove(0);
|
||||||
List<Long> taskIds = StreamUtils.toList(currentTaskList, Task::getId);
|
WorkflowUtils.deleteRunTask(StreamUtils.toList(currentTaskList, Task::getId));
|
||||||
WorkflowUtils.getFlowUserService().deleteByTaskIds(taskIds);
|
|
||||||
flowTaskMapper.deleteByIds(taskIds);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ import org.dromara.workflow.handler.WorkflowPermissionHandler;
|
|||||||
import org.dromara.workflow.mapper.FlwTaskMapper;
|
import org.dromara.workflow.mapper.FlwTaskMapper;
|
||||||
import org.dromara.workflow.service.IFlwTaskService;
|
import org.dromara.workflow.service.IFlwTaskService;
|
||||||
import org.dromara.workflow.utils.WorkflowUtils;
|
import org.dromara.workflow.utils.WorkflowUtils;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@ -155,7 +156,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
Instance instance = taskService.skip(taskId, flowParams);
|
Instance instance = taskService.skip(taskId, flowParams);
|
||||||
this.setHandler(instance, flowTask, flowCopyList);
|
this.setHandler(instance, flowTask, flowCopyList);
|
||||||
// 消息通知
|
// 消息通知
|
||||||
WorkflowUtils.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
|
sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
@ -203,7 +204,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
* @param task 任务信息
|
* @param task 任务信息
|
||||||
* @param flowCopyList 抄送人
|
* @param flowCopyList 抄送人
|
||||||
*/
|
*/
|
||||||
private void setCopy(FlowTask task, List<FlowCopy> flowCopyList) {
|
@Async
|
||||||
|
public void setCopy(FlowTask task, List<FlowCopy> flowCopyList) {
|
||||||
if (CollUtil.isEmpty(flowCopyList)) {
|
if (CollUtil.isEmpty(flowCopyList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -265,7 +267,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
|
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
|
||||||
queryWrapper.in("t.approver", LoginHelper.getUserIdStr());
|
queryWrapper.in("t.approver", LoginHelper.getUserIdStr());
|
||||||
queryWrapper.orderByDesc("t.create_time").orderByDesc("t.update_time");
|
queryWrapper.orderByDesc("t.create_time").orderByDesc("t.update_time");
|
||||||
Page<FlowHisTaskVo> page = flwTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper);
|
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
|
||||||
return TableDataInfo.build(page);
|
return TableDataInfo.build(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,7 +286,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Page<FlowTaskVo> getFlowTaskVoPage(PageQuery pageQuery, QueryWrapper<FlowTaskBo> queryWrapper) {
|
private Page<FlowTaskVo> getFlowTaskVoPage(PageQuery pageQuery, QueryWrapper<FlowTaskBo> queryWrapper) {
|
||||||
Page<FlowTaskVo> page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper);
|
Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
|
||||||
List<FlowTaskVo> records = page.getRecords();
|
List<FlowTaskVo> records = page.getRecords();
|
||||||
if (CollUtil.isNotEmpty(records)) {
|
if (CollUtil.isNotEmpty(records)) {
|
||||||
List<Long> taskIds = StreamUtils.toList(records, FlowTaskVo::getId);
|
List<Long> taskIds = StreamUtils.toList(records, FlowTaskVo::getId);
|
||||||
@ -309,7 +311,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
@Override
|
@Override
|
||||||
public TableDataInfo<FlowHisTaskVo> pageByAllTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
|
public TableDataInfo<FlowHisTaskVo> pageByAllTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
|
||||||
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
|
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
|
||||||
Page<FlowHisTaskVo> page = flwTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper);
|
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
|
||||||
return TableDataInfo.build(page);
|
return TableDataInfo.build(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,36 +362,30 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
Long definitionId = task.getDefinitionId();
|
Long definitionId = task.getDefinitionId();
|
||||||
Definition definition = defService.getById(definitionId);
|
Definition definition = defService.getById(definitionId);
|
||||||
String applyNodeCode = WorkflowUtils.applyNodeCode(definitionId);
|
String applyNodeCode = WorkflowUtils.applyNodeCode(definitionId);
|
||||||
FlowNode node = flowNodes.stream().filter(e -> e.getNodeCode().equals(task.getNodeCode())).findFirst().orElse(null);
|
List<FlowTaskVo> listRunTask = flwTaskMapper.getListRunTask(new QueryWrapper<FlowTaskBo>().eq("instance_id", task.getInstanceId()));
|
||||||
BigDecimal nodeRatio = node.getNodeRatio();
|
//不是当前节点的待审任务
|
||||||
//票签
|
List<FlowTaskVo> taskVos = StreamUtils.filter(listRunTask, e -> !e.getId().equals(taskId));
|
||||||
if (nodeRatio.compareTo(BigDecimal.ZERO) > 0 && nodeRatio.compareTo(new BigDecimal(100)) < 0) {
|
WorkflowUtils.deleteRunTask(StreamUtils.toList(taskVos, FlowTaskVo::getId));
|
||||||
List<UserDTO> userList = this.currentTaskAllUser(task.getId());
|
if (applyNodeCode.equals(bo.getNodeCode())) {
|
||||||
FlowParams flowParams = FlowParams.build();
|
WorkflowUtils.backTask(message, inst.getId(), bo.getNodeCode(), TaskStatusEnum.BACK.getStatus(), TaskStatusEnum.BACK.getStatus());
|
||||||
flowParams.nodeCode(bo.getNodeCode());
|
|
||||||
flowParams.message(message);
|
|
||||||
flowParams.skipType(SkipType.PASS.getKey());
|
|
||||||
if (applyNodeCode.equals(bo.getNodeCode())) {
|
|
||||||
flowParams.flowStatus(TaskStatusEnum.BACK.getStatus()).hisStatus(TaskStatusEnum.BACK.getStatus());
|
|
||||||
} else {
|
|
||||||
flowParams.flowStatus(TaskStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.BACK.getStatus());
|
|
||||||
}
|
|
||||||
flowParams.ignore(true);
|
|
||||||
//解决票签没权限问题
|
|
||||||
if (CollUtil.isNotEmpty(userList)) {
|
|
||||||
flowParams.handler(userList.get(0).getUserId().toString());
|
|
||||||
}
|
|
||||||
taskService.skip(task.getId(), flowParams);
|
|
||||||
} else {
|
} else {
|
||||||
//申请人节点
|
WorkflowUtils.backTask(message, inst.getId(), bo.getNodeCode(), TaskStatusEnum.WAITING.getStatus(), TaskStatusEnum.BACK.getStatus());
|
||||||
if (applyNodeCode.equals(bo.getNodeCode())) {
|
}
|
||||||
WorkflowUtils.backTask(message, inst.getId(), applyNodeCode, TaskStatusEnum.BACK.getStatus(), TaskStatusEnum.BACK.getStatus());
|
//删除记录
|
||||||
} else {
|
FlowNode node = flowNodes.stream().filter(e -> e.getNodeCode().equals(task.getNodeCode())).findFirst().orElse(null);
|
||||||
WorkflowUtils.backTask(message, inst.getId(), bo.getNodeCode(), TaskStatusEnum.WAITING.getStatus(), TaskStatusEnum.BACK.getStatus());
|
if (node.getNodeRatio().compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
List<FlowHisTask> flowHisTasks = flowHisTaskMapper.selectList(
|
||||||
|
new LambdaQueryWrapper<FlowHisTask>()
|
||||||
|
.eq(FlowHisTask::getFlowStatus, BusinessStatusEnum.BACK.getStatus())
|
||||||
|
.eq(FlowHisTask::getTaskId, taskId)
|
||||||
|
.ne(FlowHisTask::getApprover, LoginHelper.getUserIdStr())
|
||||||
|
);
|
||||||
|
if (CollUtil.isNotEmpty(flowHisTasks)) {
|
||||||
|
flowHisTaskMapper.deleteByIds(StreamUtils.toList(flowHisTasks, FlowHisTask::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Instance instance = insService.getById(inst.getId());
|
Instance instance = insService.getById(inst.getId());
|
||||||
//判断申请人节点是否有多个,只保留一个
|
//判断或节点是否有多个,只保留一个
|
||||||
List<FlowTask> currentTaskList = selectByInstId(instance.getId());
|
List<FlowTask> currentTaskList = selectByInstId(instance.getId());
|
||||||
if (CollUtil.isNotEmpty(currentTaskList)) {
|
if (CollUtil.isNotEmpty(currentTaskList)) {
|
||||||
List<String> nodeCodes = StreamUtils.toList(currentTaskList, FlowTask::getNodeCode);
|
List<String> nodeCodes = StreamUtils.toList(currentTaskList, FlowTask::getNodeCode);
|
||||||
@ -398,15 +394,13 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
List<FlowTask> flowTasks = currentTaskList.stream().filter(e -> e.getNodeCode().equals(n.getNodeCode()) && n.getNodeRatio().compareTo(BigDecimal.ZERO) == 0).collect(Collectors.toList());
|
List<FlowTask> flowTasks = currentTaskList.stream().filter(e -> e.getNodeCode().equals(n.getNodeCode()) && n.getNodeRatio().compareTo(BigDecimal.ZERO) == 0).collect(Collectors.toList());
|
||||||
if (flowTasks.size() > 1) {
|
if (flowTasks.size() > 1) {
|
||||||
flowTasks.remove(0);
|
flowTasks.remove(0);
|
||||||
List<Long> taskIds = StreamUtils.toList(flowTasks, Task::getId);
|
WorkflowUtils.deleteRunTask(StreamUtils.toList(flowTasks, Task::getId));
|
||||||
WorkflowUtils.getFlowUserService().deleteByTaskIds(taskIds);
|
|
||||||
flowTaskMapper.deleteByIds(taskIds);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.setHandler(instance, task, null);
|
this.setHandler(instance, task, null);
|
||||||
//消息通知
|
//消息通知
|
||||||
WorkflowUtils.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
@ -414,6 +408,18 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息
|
||||||
|
*
|
||||||
|
* @param flowName 流程定义名称
|
||||||
|
* @param messageType 消息类型
|
||||||
|
* @param notice 消息内容,为空则发送默认配置的消息内容
|
||||||
|
*/
|
||||||
|
@Async
|
||||||
|
public void sendMessage(String flowName, Long instId, List<String> messageType, String notice) {
|
||||||
|
WorkflowUtils.sendMessage(flowName, instId, messageType, notice);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取可驳回节点
|
* 获取可驳回节点
|
||||||
*
|
*
|
||||||
|
@ -28,6 +28,7 @@ import org.dromara.warm.flow.orm.entity.FlowNode;
|
|||||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowUser;
|
import org.dromara.warm.flow.orm.entity.FlowUser;
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
|
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
|
||||||
|
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
||||||
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
||||||
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
||||||
import org.dromara.workflow.service.IFlwTaskService;
|
import org.dromara.workflow.service.IFlwTaskService;
|
||||||
@ -52,6 +53,7 @@ public class WorkflowUtils {
|
|||||||
private static final TaskService taskService = SpringUtils.getBean(TaskService.class);
|
private static final TaskService taskService = SpringUtils.getBean(TaskService.class);
|
||||||
private static final FlowNodeMapper FLOW_NODE_MAPPER = SpringUtils.getBean(FlowNodeMapper.class);
|
private static final FlowNodeMapper FLOW_NODE_MAPPER = SpringUtils.getBean(FlowNodeMapper.class);
|
||||||
private static final NodeService nodeService = SpringUtils.getBean(NodeService.class);
|
private static final NodeService nodeService = SpringUtils.getBean(NodeService.class);
|
||||||
|
private static final FlowTaskMapper FLOW_TASK_MAPPER = SpringUtils.getBean(FlowTaskMapper.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取工作流用户service
|
* 获取工作流用户service
|
||||||
@ -189,4 +191,16 @@ public class WorkflowUtils {
|
|||||||
return nextNode.getNodeCode();
|
return nextNode.getNodeCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除运行中的任务
|
||||||
|
*
|
||||||
|
* @param taskIds 任务id
|
||||||
|
*/
|
||||||
|
public static void deleteRunTask(List<Long> taskIds) {
|
||||||
|
if (CollUtil.isEmpty(taskIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
userService.deleteByTaskIds(taskIds);
|
||||||
|
FLOW_TASK_MAPPER.deleteByIds(taskIds);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<resultMap type="org.dromara.workflow.domain.vo.FlowHisTaskVo" id="FlowHisTaskResult">
|
<resultMap type="org.dromara.workflow.domain.vo.FlowHisTaskVo" id="FlowHisTaskResult">
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<select id="getTaskWaitByPage" resultMap="FlowTaskResult">
|
<select id="getListRunTask" resultMap="FlowTaskResult">
|
||||||
select * from (
|
select * from (
|
||||||
select distinct
|
select distinct
|
||||||
t.id,
|
t.id,
|
||||||
@ -42,7 +42,7 @@
|
|||||||
${ew.getCustomSqlSegment}
|
${ew.getCustomSqlSegment}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getTaskFinishByPage" resultMap="FlowHisTaskResult">
|
<select id="getListFinishTask" resultMap="FlowHisTaskResult">
|
||||||
select * from (
|
select * from (
|
||||||
select
|
select
|
||||||
a.id,
|
a.id,
|
||||||
|
27
script/bpmn/leave5.xml
Normal file
27
script/bpmn/leave5.xml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<definition flowCode="leave5" flowName="请假申请-并行会签网关" version="1" category="100" formCustom="N" formPath="/workflow/leaveEdit/index">
|
||||||
|
<node nodeType="start" nodeCode="ebebaf26-9cb6-497e-8119-4c9fed4c597c" nodeName="开始" nodeRatio="0.000" coordinate="300,220|300,220" skipAnyNode="N" formCustom="N">
|
||||||
|
<skip coordinate="320,220;350,220;350,220;340,220;340,220;370,220" skipType="PASS">e1b04e96-dc81-4858-a309-2fe945d2f374</skip>
|
||||||
|
</node>
|
||||||
|
<node nodeType="between" nodeCode="e1b04e96-dc81-4858-a309-2fe945d2f374" nodeName="申请人" nodeRatio="0.000" coordinate="420,220|420,220" skipAnyNode="N" formCustom="N">
|
||||||
|
<skip coordinate="470,220;535,220" skipType="PASS">3e743f4f-51ca-41d4-8e94-21f5dd9b59c9</skip>
|
||||||
|
</node>
|
||||||
|
<node nodeType="parallel" nodeCode="3e743f4f-51ca-41d4-8e94-21f5dd9b59c9" nodeRatio="0.000" coordinate="560,220" skipAnyNode="N" formCustom="N">
|
||||||
|
<skip coordinate="560,245;560,320;650,320" skipType="PASS">c80f273e-1f17-4bd8-9ad1-04a4a94ea862</skip>
|
||||||
|
<skip coordinate="560,195;560,120;650,120" skipType="PASS">1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4</skip>
|
||||||
|
</node>
|
||||||
|
<node nodeType="between" nodeCode="c80f273e-1f17-4bd8-9ad1-04a4a94ea862" nodeName="会签" permissionFlag="role:1,role:3" nodeRatio="100.000" coordinate="700,320|700,320" skipAnyNode="N" formCustom="N">
|
||||||
|
<skip coordinate="750,320;860,320;860,245" skipType="PASS">1a20169e-3d82-4926-a151-e2daad28de1b</skip>
|
||||||
|
</node>
|
||||||
|
<node nodeType="parallel" nodeCode="1a20169e-3d82-4926-a151-e2daad28de1b" nodeRatio="0.000" coordinate="860,220" skipAnyNode="N" formCustom="N">
|
||||||
|
<skip coordinate="885,220;950,220" skipType="PASS">7a8f0473-e409-442e-a843-5c2b813d00e9</skip>
|
||||||
|
</node>
|
||||||
|
<node nodeType="between" nodeCode="7a8f0473-e409-442e-a843-5c2b813d00e9" nodeName="CEO" permissionFlag="1" nodeRatio="0.000" coordinate="1000,220|1000,220" skipAnyNode="N" formCustom="N">
|
||||||
|
<skip coordinate="1050,220;1120,220" skipType="PASS">03c4d2bc-58b5-4408-a2e4-65afb046f169</skip>
|
||||||
|
</node>
|
||||||
|
<node nodeType="end" nodeCode="03c4d2bc-58b5-4408-a2e4-65afb046f169" nodeName="结束" nodeRatio="0.000" coordinate="1140,220|1140,220" skipAnyNode="N" formCustom="N"/>
|
||||||
|
<node nodeType="between" nodeCode="1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4" nodeName="百分之60票签" permissionFlag="${userList}" nodeRatio="60.000" coordinate="700,120|700,120" skipAnyNode="N" formCustom="N">
|
||||||
|
<skip coordinate="750,120;860,120;860,195" skipType="PASS">1a20169e-3d82-4926-a151-e2daad28de1b</skip>
|
||||||
|
</node>
|
||||||
|
</definition>
|
Loading…
x
Reference in New Issue
Block a user