add:新增企标废止发布流程

This commit is contained in:
sunzheng
2024-09-19 17:53:12 +08:00
parent 63b077a99a
commit d960f2d482
13 changed files with 785 additions and 5 deletions
@@ -15,6 +15,7 @@ public enum ProcessTypeEnum {
STANDARD_INTERPRET("标准解读流程", 2, "com.jero.modules.activiti.process.standardinterpret.service.impl.StandardInterpretFlow", "/workCenter/StandardInterpretationProcess", "/workCenter/StandardInterpretationProcess"),
STANDARD_COMPLIANCE_CHECK("法规符合性排查流程", 3, "com.jero.modules.activiti.process.standardComplianceCheck.service.StandardComplianceCheckFlow", "/workCenter/RegulatoryComplianceCheckProcess", "/workCenter/RegulatoryComplianceCheckProcess"),
MARKET_STANDARD_PUBLISH("市场清单发布流程", 4, "com.jero.modules.activiti.process.ms.service.impl.ProcessMarketStandardReleaseServiceImpl", "/workCenter/MarketListReleaseProcess", "/workCenter/MarketListReleaseProcess"),
ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", 5, "com.jero.modules.activiti.process.abolish.service.impl.ProcessAbolishReleaseServiceImpl", "/workCenter/AbolishReleaseProcess", "/workCenter/AbolishReleaseProcess"),
;
private final String name;
@@ -0,0 +1,84 @@
package com.jero.modules.activiti.process.abolish.controller;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.aspect.annotation.Translation;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
import com.jero.modules.activiti.process.abolish.service.IProcessAbolishReleaseService;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* <p>
* 企标废止发布流程 前端控制器
* </p>
*
* @author sz
* @since 2024-09-05
*/
@Slf4j
@Api(tags = "企标废止发布流程")
@RestController
@RequestMapping("/process/abolishRelease")
public class ProcessAbolishReleaseController {
@Resource
private IProcessAbolishReleaseService processAbolishReleaseService;
@Resource
private ActFlowCommonService actFlowCommonService;
@AutoLog(value = "企标废止发布流程-发起流程")
@ApiOperation(value = "企标废止发布流程-发起流程", notes = "企标废止发布流程-发起流程")
@PostMapping(value = "/start")
public Result<T> startProcess(@Validated @RequestBody ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
processAbolishReleaseService.startProcess(processInfoVO);
return Result.OK();
}
@AutoLog(value = "企标废止发布流程-同意")
@ApiOperation(value = "企标废止发布流程-同意", notes = "企标废止发布流程-同意")
@PostMapping("/agree")
public Result<T> agree(@Validated @RequestBody ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
processAbolishReleaseService.approveTask(processInfoVO, true);
return Result.OK();
}
@AutoLog(value = "企标废止发布流程-驳回")
@ApiOperation(value = "企标废止发布流程-驳回", notes = "企标废止发布流程-驳回")
@PostMapping("/reject")
public Result<T> reject(@Validated @RequestBody ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
processAbolishReleaseService.approveTask(processInfoVO, false);
return Result.OK();
}
@AutoLog(value = "企标废止发布流程-提交")
@ApiOperation(value = "企标废止发布流程-提交", notes = "企标废止发布流程-提交")
@PostMapping("/submit")
public Result<T> submit(@Validated @RequestBody ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
processAbolishReleaseService.submit(processInfoVO);
return Result.OK();
}
@AutoLog(value = "企标废止发布流程-办理")
@ApiOperation(value="企标废止发布流程-办理", notes="企标废止发布流程-办理")
@GetMapping("/handle/{taskId}")
@Translation
public Result<?> handle(@PathVariable("taskId") String taskId) {
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.ENTERPRISE_STANDARD_ABOLISH_PUBLISH);
if (draft != null) {
return Result.OK(draft);
}
return Result.OK(processAbolishReleaseService.getHandleData(taskId));
}
}
@@ -0,0 +1,77 @@
package com.jero.modules.activiti.process.abolish.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
* 企标废止发布流程
* </p>
*
* @author sz
* @since 2024-09-05
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("process_abolish_release")
@ApiModel(value="ProcessAbolishRelease对象", description="企标废止发布流程")
public class ProcessAbolishRelease implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "流程实例Id")
private String processInstanceId;
@ApiModelProperty(value = "标准编号")
private String standardNumber;
@ApiModelProperty(value = "标准名称")
private String standardName;
@ApiModelProperty(value = "起草人")
private String drafter;
@ApiModelProperty(value = "主起草部门")
private String drafterDepart;
@ApiModelProperty(value = "关联部门")
private String relatedDepart;
@ApiModelProperty(value = "废止理由")
private String abolishReason;
@ApiModelProperty(value = "附件文件id")
private String fileIds;
@ApiModelProperty(value = "0表示未删除,1表示删除")
private Integer delFlag;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}
@@ -0,0 +1,54 @@
package com.jero.modules.activiti.process.abolish.listener;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
import com.jero.modules.activiti.process.abolish.service.IProcessAbolishReleaseService;
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.tag.enums.TableNameEnum;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author: Mzaxd
* @Date: 2023/10/10 14:14
*/
@Slf4j
@Component("ProcessESAbolishEndListener")
public class ProcessESAbolishEndListener implements ExecutionListener {
@Resource
private ILawsEnterpriseStandardService esService;
@Resource
private IProcessAbolishReleaseService processAbolishReleaseService;
/**
* 企标废止流程结束之后需要把标准状态设为废止
* @param delegateExecution
*/
@Override
public void notify(DelegateExecution delegateExecution) {
log.info("企标废止流程结束 监听执行器开始执行");
// 找到流程实例Id
String processInstanceId = delegateExecution.getProcessInstanceId();
LambdaQueryWrapper<ProcessAbolishRelease> abolishLambdaQueryWrapper = new LambdaQueryWrapper<>();
abolishLambdaQueryWrapper.eq(ProcessAbolishRelease::getProcessInstanceId, processInstanceId);
ProcessAbolishRelease abolish = processAbolishReleaseService.getOne(abolishLambdaQueryWrapper);
String standNo = abolish.getStandardNumber();
LambdaQueryWrapper<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
esWrapper.eq(LawsEnterpriseStandard::getStandardNumber, standNo);
LawsEnterpriseStandard one = esService.getOne(esWrapper);
log.info("企标废止流程监听执行器开始执行,企标编号为:{}", standNo);
esService.update(new LambdaUpdateWrapper<LawsEnterpriseStandard>()
.set(LawsEnterpriseStandard::getStandardState, StandardStateEnum.ABOLISH.getStateValue())
.eq(LawsEnterpriseStandard::getStandardNumber, standNo));
// todo 如果需要发消息可以在此处编写
log.info("企标废止流程结束监听执行器执行结束");
}
}
@@ -0,0 +1,16 @@
package com.jero.modules.activiti.process.abolish.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
/**
* <p>
* 企标废止发布流程 Mapper 接口
* </p>
*
* @author sz
* @since 2024-09-05
*/
public interface ProcessAbolishReleaseMapper extends BaseMapper<ProcessAbolishRelease> {
}
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.activiti.process.abolish.mapper.ProcessAbolishReleaseMapper">
</mapper>
@@ -0,0 +1,25 @@
package com.jero.modules.activiti.process.abolish.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
/**
* <p>
* 企标废止发布流程 服务类
* </p>
*
* @author sz
* @since 2024-09-05
*/
public interface IProcessAbolishReleaseService extends IService<ProcessAbolishRelease> {
void startProcess(ProcessInfoVO<ProcessAbolishRelease> processInfoVO);
void approveTask(ProcessInfoVO<ProcessAbolishRelease> processInfoVO, boolean pass);
ProcessInfoVO<ProcessAbolishRelease> getHandleData(String taskId);
void submit(ProcessInfoVO<ProcessAbolishRelease> processInfoVO);
}
@@ -0,0 +1,281 @@
package com.jero.modules.activiti.process.abolish.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.common.ActivitiCommon;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease;
import com.jero.modules.activiti.process.abolish.mapper.ProcessAbolishReleaseMapper;
import com.jero.modules.activiti.process.abolish.service.IProcessAbolishReleaseService;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.sys.utils.UserUtils;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import static com.jero.modules.activiti.common.ActivitiCommon.PASS;
/**
* <p>
* 企标废止发布流程 服务实现类
* </p>
*
* @author sz
* @since 2024-09-05
*/
@Service
@Transactional(rollbackFor = JeroBootException.class)
public class ProcessAbolishReleaseServiceImpl extends ServiceImpl<ProcessAbolishReleaseMapper, ProcessAbolishRelease> implements IProcessAbolishReleaseService {
@Resource
private ActFlowCommonService actFlowCommonService;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@Resource
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private ProcessAllService processAllService;
@Resource
private RuntimeService runtimeService;
@Resource
private IProcessHandleService processHandleService;
@Resource
private TaskService taskService;
@Resource
private ILawsEnterpriseStandardService esService;
@Override
public void startProcess(ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
// 流程Key
String processDefinitionKey = ProcessType.ENTERPRISE_STANDARD_ABOLISH_PUBLISH.getProcessKey();
// 流程信息
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
// 任务信息
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
// 人员信息
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 业务数据
ProcessAbolishRelease businessInfoDTO = processInfoVO.getBusinessInfoDTO();
// 设置流程变量
Map<String, Object> actVariables = setVariables(userInfoMap);
// 删除草稿
actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId());
// 启动流程
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
// 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId();
String processInstanceId = processInstance.getId();
businessInfoDTO.setProcessInstanceId(processInstanceId);
processInfo.setProcessInstanceId(processInstanceId);
processInfo.setProcessDefinitionId(processDefinitionId);
processInfo.setProcessType(ProcessTypeEnum.ENTERPRISE_STANDARD_ABOLISH_PUBLISH.getValue());
// 第一个节点业务数据处理
this.startNodeBusProcess(processInfoVO);
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, changeVariables(userInfoMap));
// 当前用户Id
String userId = UserUtils.getUserId();
// 获取第一个任务的taskId
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
processTask.setTaskId(taskId);
// 保存第一个节点的草稿
processHandleService.saveToDraft(processInfoVO, UserUtils.getUserId());
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
// 根据流程实例id更新流程总表
actFlowCommonService.updateProcessAll(processInfo);
// 自动完成第一个任务
actFlowCommonService.completeTask(taskId, userId);
// 保存快照
processHandleService.saveToSnapshot(processInfoVO,userId);
}
@Override
public void approveTask(ProcessInfoVO<ProcessAbolishRelease> processInfoVO, boolean pass) {
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
String taskId = processTask.getTaskId();
// 获取task
if (StringUtils.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("taskId为空或任务不存在");
}
// 获取当前节点的id
ProcessApprovalRecord processApprovalRecord = actFlowCommonService.getNodeIdByTaskId(taskId);
String xmlNodeId = processApprovalRecord.getNodeId();
//任务Id 查询任务对象
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String processInstanceId = task.getProcessInstanceId();
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
if(Objects.isNull(task)){
throw new JeroBootException("找不到对应任务");
}
if (pass && task.getName().equals("授权人审批")) {
ProcessAbolishRelease businessInfoDTO = this.getOne(new LambdaQueryWrapper<ProcessAbolishRelease>()
.eq(ProcessAbolishRelease::getProcessInstanceId, processInstanceId));
String standardNumber = businessInfoDTO.getStandardNumber();
LawsEnterpriseStandard es = esService.getOne(new LambdaQueryWrapper<LawsEnterpriseStandard>()
.eq(LawsEnterpriseStandard::getStandardNumber, standardNumber));
if (StandardStateEnum.ABOLISH.getStateValue().equals(es.getStandardState())) {
throw new JeroBootException("该标准已废止,需要驳回重新选择");
}
}
if(Objects.isNull(processTask.getCommitFlag())){
processTask.setCommitFlag(pass ? ActivitiCommon.COMMIT_FLAG1 : ActivitiCommon.COMMIT_FLAG2);
}
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
// 设置流程变量
runtimeService.setVariable(processInstanceId, PASS, pass);
// 审批节点
actFlowCommonService.completeTask(taskId, userId);
// 驳回,结束所有节点
processApprovalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId);
// 保存快照
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
if(!Objects.isNull(process)){
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
basicProcessInfoDTO.setProcessName(process.getPrcName());
basicProcessInfoDTO.setProcessType(process.getPrcType());
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
// 保存快照
processHandleService.saveToSnapshot(processInfoVO,userId);
}
}
@Override
public void submit(ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
String taskId = processTask.getTaskId();
// 获取task
if (StringUtils.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("taskId为空或任务不存在");
}
//任务Id 查询任务对象
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if(Objects.isNull(task)){
throw new JeroBootException("找不到对应任务");
}
// 人员信息
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 设置流程变量
Map<String, Object> actVariables = setVariables(userInfoMap);
String processInstanceId = task.getProcessInstanceId();
runtimeService.setVariables(processInstanceId,actVariables);
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
// 发起节点 更新业务数据
startNodeBusProcess(processInfoVO);
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
// 审批节点
actFlowCommonService.completeTask(taskId, userId);
// 保存快照
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
if(!Objects.isNull(process)){
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
basicProcessInfoDTO.setProcessName(process.getPrcName());
basicProcessInfoDTO.setProcessType(process.getPrcType());
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
// 保存快照
processHandleService.saveToSnapshot(processInfoVO,userId);
}
}
@Override
public ProcessInfoVO<ProcessAbolishRelease> getHandleData(String taskId) {
if (!actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("任务不存在");
}
ProcessInfoVO<ProcessAbolishRelease> result = new ProcessInfoVO<>();
// 使用流程引擎根据taskId找到流程实例Id
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
if(!Objects.isNull(process)){
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
basicProcessInfoDTO.setProcessName(process.getPrcName());
basicProcessInfoDTO.setProcessType(process.getPrcType());
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
result.setBasicProcessInfoDTO(basicProcessInfoDTO);
}
// 获取流程实例数据
LambdaQueryWrapper<ProcessAbolishRelease> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ProcessAbolishRelease::getProcessInstanceId, processInstanceId);
ProcessAbolishRelease data = getOne(lambdaQueryWrapper,false);
result.setBusinessInfoDTO(data);
return result;
}
private void startNodeBusProcess(ProcessInfoVO<ProcessAbolishRelease> processInfoVO) {
ProcessAbolishRelease businessInfoDTO = processInfoVO.getBusinessInfoDTO();
saveOrUpdate(businessInfoDTO);
}
private Map<String, Object> setVariables(Map<String, Object> userInfoMap) {
Map<String, Object> map = new HashMap<>();
// 人员信息
userInfoMap.forEach((key, value) -> {
if(Objects.equals("checkUserLeader1List",key + "List") ||
Objects.equals("checkUserLeader2List",key + "List") ||
Objects.equals("checkUserLeader3List",key + "List") ||
Objects.equals("checkUserLeader4List",key + "List") ||
Objects.equals("checkUserLeader5List",key + "List") ||
Objects.equals("checkUserLeader6List",key + "List")){
map.put(key, value);
map.put(key + "List", Arrays.asList(value.toString().split(",")));
return;
}
map.put(key, value);
});
return map;
}
private Map<String, Object> changeVariables(Map<String, Object> userInfoMap) {
Map<String, Object> map = new HashMap<>();
// 人员信息
userInfoMap.forEach((key, value) -> {
if(Objects.equals("checkUserLeader1List",key + "List") ||
Objects.equals("checkUserLeader4List",key + "List") ||
Objects.equals("checkUserLeader5List",key + "List") ||
Objects.equals("checkUserLeader6List",key + "List")){
map.put(key + "List", value);
return;
}
map.put(key, value);
});
return map;
}
}
@@ -15,6 +15,7 @@ public enum ProcessType {
STANDARD_INTERPRET("标准解读流程", "2", "standard_interpret", "StandardInterpretFlowServiceImpl"),
STANDARD_COMPLIANCE_CHECK("法规符合性评估流程", "3", "laws-evaluation-main", "ProcessStandardComplianceCheckServiceImpl"),
MARKET_STANDARD_PUBLISH("市场清单发布流程", "4", "market_standard_publish", "ProcessNewStandardImportServiceImpl"),
ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", "5", "enterprise_standard_abolish_publish", "ProcessAbolishReleaseServiceImpl"),
;
private final String name;
@@ -57,8 +57,8 @@ public class LawsClubMeeting implements Serializable {
@Excel(name = "会议费用", width = 20)
private String meetingCost;
@ApiModelProperty(value = "线/线地点")
@Excel(name = "线/线地点", width = 20)
@ApiModelProperty(value = "线/线地点")
@Excel(name = "线/线地点", width = 20)
private String meetingPlace;
@ApiModelProperty(value = "计划完成日期")
@@ -62,6 +62,7 @@ public class LawsClubResearchInformation implements Serializable {
@ApiModelProperty(value = "专业接口人")
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname")
@Excel(name = "专业接口人", width = 20, dicText = "realname", dicCode = "id", dictTable = "sys_user")
private String specializedInterfacePerson;
@ApiModelProperty(value = "专业模块")
@@ -226,13 +226,11 @@ public class LawsClubMeetingServiceImpl extends ServiceImpl<LawsClubMeetingMappe
//解压缩
String zipEntryName = FileUnZip.unZipFiles2(path +File.separator+ file.getOriginalFilename(), path);
// 1.获取其中的文件,
// List<File> fileList = FileUnZip.readExcelFile(zipEntryName);
File zipFile = new File(zipEntryName);
List<File> fileList = new ArrayList<>();
if (zipFile.isDirectory()) {
File[] files = zipFile.listFiles();
for (File fi : files) {
// 对文件进行过滤,只读取Excel文件
fileList.add(fi);
}
}
@@ -272,7 +270,6 @@ public class LawsClubMeetingServiceImpl extends ServiceImpl<LawsClubMeetingMappe
}
}
private StringBuilder validateExcelData(List<LawsClubMeetingExcel> meetingExcels, Map<String, File> unZipFileMap) throws IOException{
StringBuilder msg = new StringBuilder();
// 拿到这个流程的名称
@@ -459,6 +456,7 @@ public class LawsClubMeetingServiceImpl extends ServiceImpl<LawsClubMeetingMappe
} else if (currentMeeting != null && isMemberValid) {
// 如果会议记录无效但成员记录有效,将成员信息添加到当前有效会议的成员列表中
LawsClubMeetingMemberExcel member = new LawsClubMeetingMemberExcel();
member.setMemberId(record.getMemberId());
member.setDepartId(record.getDepartId());
member.setMeetingSpecializedModule(record.getMeetingSpecializedModule());
member.setMeetingFileId(record.getMeetingFileId());
@@ -0,0 +1,237 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
<process id="enterprise_standard_abolish_publish" name="企标废止" isExecutable="true">
<documentation>企标废止流程</documentation>
<startEvent id="sid-8d441ae4-a274-41d7-8c7b-3b95b0402768" name="开始"/>
<userTask id="sid-b8761461-ccc9-4b50-9b57-f2344eab3346" name="起草人发起" activiti:assignee="${importStartUser}"/>
<sequenceFlow id="sid-50f37ee8-0aff-4855-bca5-867898d442fb" sourceRef="sid-8d441ae4-a274-41d7-8c7b-3b95b0402768" targetRef="sid-b8761461-ccc9-4b50-9b57-f2344eab3346"/>
<exclusiveGateway id="sid-291d8730-f124-496a-a3dc-275e517f2652"/>
<sequenceFlow id="sid-5f7f3396-767c-454f-9be6-10297e2e681a" sourceRef="sid-b8761461-ccc9-4b50-9b57-f2344eab3346" targetRef="sid-291d8730-f124-496a-a3dc-275e517f2652"/>
<userTask id="sid-33ce6ca2-b593-463f-87bb-9a875e356c45" name="部门经理审批" activiti:assignee="${checkUserLeader1}">
<multiInstanceLoopCharacteristics isSequential="false" activiti:collection="checkUserLeader1List" activiti:elementVariable="checkUserLeader1">
<completionCondition>${!pass}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<sequenceFlow id="sid-148df960-06ef-4548-9b70-d4445aba3a1a" sourceRef="sid-291d8730-f124-496a-a3dc-275e517f2652" targetRef="sid-33ce6ca2-b593-463f-87bb-9a875e356c45">
<conditionExpression xsi:type="tFormalExpression"/>
</sequenceFlow>
<exclusiveGateway id="sid-8d8f31d1-f839-4a59-9acf-cec8ad734660"/>
<sequenceFlow id="sid-4f957b28-312e-4e65-a37e-e9097fa8d1f4" sourceRef="sid-33ce6ca2-b593-463f-87bb-9a875e356c45" targetRef="sid-8d8f31d1-f839-4a59-9acf-cec8ad734660"/>
<userTask id="sid-516d0d52-f3bc-4388-b3d8-7a5ebdbd1e6a" name="法规部门处理人审批" activiti:assignee="${checkUserLeader2}"/>
<sequenceFlow id="sid-16642411-596a-4b20-8cff-ee607ea5f25c" sourceRef="sid-8d8f31d1-f839-4a59-9acf-cec8ad734660" targetRef="sid-516d0d52-f3bc-4388-b3d8-7a5ebdbd1e6a" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<exclusiveGateway id="sid-013550bb-e799-47d1-83d0-f7c9ba70c5fe"/>
<sequenceFlow id="sid-a104fa64-65aa-48c1-a204-9edc47a2e310" sourceRef="sid-516d0d52-f3bc-4388-b3d8-7a5ebdbd1e6a" targetRef="sid-013550bb-e799-47d1-83d0-f7c9ba70c5fe"/>
<sequenceFlow id="sid-40813dc1-c806-4e8c-a91f-fa16ac62b3fe" sourceRef="sid-8d8f31d1-f839-4a59-9acf-cec8ad734660" targetRef="sid-b8761461-ccc9-4b50-9b57-f2344eab3346" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-83244c37-5bb1-4db8-99fb-8f946c33c1d9" sourceRef="sid-013550bb-e799-47d1-83d0-f7c9ba70c5fe" targetRef="sid-b8761461-ccc9-4b50-9b57-f2344eab3346" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
<userTask id="sid-8bcb7238-381f-44de-a15e-9383a1ce87ff" name="法规部门经理审批" activiti:assignee="${checkUserLeader3}"/>
<sequenceFlow id="sid-056352d4-51aa-4085-a70d-5ec91e43fc66" sourceRef="sid-013550bb-e799-47d1-83d0-f7c9ba70c5fe" targetRef="sid-8bcb7238-381f-44de-a15e-9383a1ce87ff" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<exclusiveGateway id="sid-195839b5-9aba-4f88-bdee-e5df5ad2c2a4"/>
<sequenceFlow id="sid-b28430a5-602d-4c9d-b819-948ed23545cc" sourceRef="sid-8bcb7238-381f-44de-a15e-9383a1ce87ff" targetRef="sid-195839b5-9aba-4f88-bdee-e5df5ad2c2a4"/>
<userTask id="sid-f459d33d-12a8-4279-b25e-2d2d57b256f9" name="高级经理审批" activiti:assignee="${checkUserLeader4}">
<multiInstanceLoopCharacteristics isSequential="false" activiti:collection="checkUserLeader4List" activiti:elementVariable="checkUserLeader4">
<completionCondition>${!pass}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<sequenceFlow id="sid-cf57e667-8f81-4b49-9120-36c043b3d9e5" sourceRef="sid-195839b5-9aba-4f88-bdee-e5df5ad2c2a4" targetRef="sid-f459d33d-12a8-4279-b25e-2d2d57b256f9" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<exclusiveGateway id="sid-1d4e06ca-4162-4149-902b-569779071f60"/>
<sequenceFlow id="sid-baf4a875-3935-4cdc-986d-5e00ca04ddd3" sourceRef="sid-f459d33d-12a8-4279-b25e-2d2d57b256f9" targetRef="sid-1d4e06ca-4162-4149-902b-569779071f60"/>
<userTask id="sid-fc053c4d-804f-41c9-af47-cd77600cf6d1" name="总监审批" activiti:assignee="${checkUserLeader5}">
<multiInstanceLoopCharacteristics isSequential="false" activiti:collection="checkUserLeader5List" activiti:elementVariable="checkUserLeader5">
<completionCondition>${!pass}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<sequenceFlow id="sid-4bd9e242-081a-4b2b-a88c-7d85b003f057" sourceRef="sid-1d4e06ca-4162-4149-902b-569779071f60" targetRef="sid-fc053c4d-804f-41c9-af47-cd77600cf6d1" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<exclusiveGateway id="sid-fefd80fb-f234-4fea-87e7-de958f25111a"/>
<sequenceFlow id="sid-94b6733c-43b0-4f04-9228-7b654b531a43" sourceRef="sid-fc053c4d-804f-41c9-af47-cd77600cf6d1" targetRef="sid-fefd80fb-f234-4fea-87e7-de958f25111a"/>
<userTask id="sid-e569a71d-ffa4-4d1e-ae7e-0ea24cb6df8c" name="授权人审批" activiti:assignee="${checkUserLeader6}">
<multiInstanceLoopCharacteristics isSequential="false" activiti:collection="checkUserLeader6List" activiti:elementVariable="checkUserLeader6">
<completionCondition>${!pass}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<sequenceFlow id="sid-9fea5c28-bd1d-4134-b7c2-13a19662ddcb" sourceRef="sid-fefd80fb-f234-4fea-87e7-de958f25111a" targetRef="sid-e569a71d-ffa4-4d1e-ae7e-0ea24cb6df8c" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<exclusiveGateway id="sid-c5ac1290-2bb7-437a-a7c0-8d69c023c7eb"/>
<sequenceFlow id="sid-9ca041df-ee5e-44b8-b127-04f1fb2cb6f5" sourceRef="sid-e569a71d-ffa4-4d1e-ae7e-0ea24cb6df8c" targetRef="sid-c5ac1290-2bb7-437a-a7c0-8d69c023c7eb"/>
<endEvent id="sid-80b49dd1-7efb-452f-a00b-bc15b978b4d7" name="结束">
<extensionElements>
<activiti:executionListener event="end" delegateExpression="${ProcessESAbolishEndListener}"/>
</extensionElements>
</endEvent>
<sequenceFlow id="sid-9c23b612-1e5b-4926-afda-7e85c507f791" sourceRef="sid-c5ac1290-2bb7-437a-a7c0-8d69c023c7eb" targetRef="sid-80b49dd1-7efb-452f-a00b-bc15b978b4d7" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-a59cd2c2-e417-452c-a7fc-b3afa7c58757" sourceRef="sid-195839b5-9aba-4f88-bdee-e5df5ad2c2a4" targetRef="sid-b8761461-ccc9-4b50-9b57-f2344eab3346" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-798b2b60-d54a-4b78-8a2a-bbaa3be7ecc7" sourceRef="sid-1d4e06ca-4162-4149-902b-569779071f60" targetRef="sid-b8761461-ccc9-4b50-9b57-f2344eab3346" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-752481d2-cd8d-40db-a484-7bd8ac2f4fb0" sourceRef="sid-fefd80fb-f234-4fea-87e7-de958f25111a" targetRef="sid-b8761461-ccc9-4b50-9b57-f2344eab3346" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-8e51b2ce-691e-4fca-a617-682b17d51118" sourceRef="sid-c5ac1290-2bb7-437a-a7c0-8d69c023c7eb" targetRef="sid-b8761461-ccc9-4b50-9b57-f2344eab3346" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_es-abolish">
<bpmndi:BPMNPlane bpmnElement="enterprise_standard_abolish_publish" id="BPMNPlane_es-abolish">
<bpmndi:BPMNShape id="shape-d048721b-8a55-4159-b08a-2316a91d3f56" bpmnElement="sid-8d441ae4-a274-41d7-8c7b-3b95b0402768">
<omgdc:Bounds x="-475.0" y="-65.0" width="30.0" height="30.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-cf8209fb-b09b-4658-b32d-c1258a66c168" bpmnElement="sid-b8761461-ccc9-4b50-9b57-f2344eab3346">
<omgdc:Bounds x="-410.0" y="-90.0" width="100.0" height="80.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-72902c33-52d9-4954-9fe5-272515c6ebc8" bpmnElement="sid-50f37ee8-0aff-4855-bca5-867898d442fb">
<omgdi:waypoint x="-445.0" y="-50.0"/>
<omgdi:waypoint x="-410.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-840583b1-86f0-4ee1-991b-6ac9d29e540b" bpmnElement="sid-291d8730-f124-496a-a3dc-275e517f2652">
<omgdc:Bounds x="-290.0" y="-70.0" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-9e04b75c-124b-442c-980e-e9ad253c8d86" bpmnElement="sid-5f7f3396-767c-454f-9be6-10297e2e681a">
<omgdi:waypoint x="-310.0" y="-50.0"/>
<omgdi:waypoint x="-290.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-ceb3d2e5-5849-4ed7-bc65-61b902ffe29f" bpmnElement="sid-33ce6ca2-b593-463f-87bb-9a875e356c45">
<omgdc:Bounds x="-225.0" y="-90.0" width="100.0" height="80.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-12ccc260-5470-4b3a-a645-808316ec6f01" bpmnElement="sid-148df960-06ef-4548-9b70-d4445aba3a1a">
<omgdi:waypoint x="-250.0" y="-50.0"/>
<omgdi:waypoint x="-225.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-50a2acde-242c-47bc-b341-45ff98906a65" bpmnElement="sid-8d8f31d1-f839-4a59-9acf-cec8ad734660">
<omgdc:Bounds x="-95.0" y="-70.0" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-05a8bb52-257e-436a-9d7a-317e32124a1d" bpmnElement="sid-4f957b28-312e-4e65-a37e-e9097fa8d1f4">
<omgdi:waypoint x="-125.0" y="-50.0"/>
<omgdi:waypoint x="-95.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-3ec593db-08a8-4cb5-afd3-f01940310b3e" bpmnElement="sid-516d0d52-f3bc-4388-b3d8-7a5ebdbd1e6a">
<omgdc:Bounds x="-25.0" y="-90.0" width="100.0" height="80.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-ba9aec74-fabe-46b1-875b-92e2b1931acd" bpmnElement="sid-16642411-596a-4b20-8cff-ee607ea5f25c">
<omgdi:waypoint x="-55.0" y="-50.0"/>
<omgdi:waypoint x="-25.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-4aedc092-7aa7-404a-a5f3-97893f92f8bd" bpmnElement="sid-013550bb-e799-47d1-83d0-f7c9ba70c5fe">
<omgdc:Bounds x="115.0" y="-70.0" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-677f376a-2373-4638-9b61-a6882bb5a5e9" bpmnElement="sid-a104fa64-65aa-48c1-a204-9edc47a2e310">
<omgdi:waypoint x="75.0" y="-50.0"/>
<omgdi:waypoint x="115.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-fa2317e6-91c1-46ee-b59d-65a2a5566d6a" bpmnElement="sid-40813dc1-c806-4e8c-a91f-fa16ac62b3fe">
<omgdi:waypoint x="-75.0" y="-30.0"/>
<omgdi:waypoint x="-75.0" y="35.0"/>
<omgdi:waypoint x="-360.0" y="35.0"/>
<omgdi:waypoint x="-360.0" y="-10.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-8a5eec28-e114-4bcd-8724-e441754c864d" bpmnElement="sid-83244c37-5bb1-4db8-99fb-8f946c33c1d9">
<omgdi:waypoint x="135.0" y="-30.0"/>
<omgdi:waypoint x="135.0" y="35.0"/>
<omgdi:waypoint x="-360.0" y="35.0"/>
<omgdi:waypoint x="-360.0" y="-10.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-4f8b4f09-40a8-4e55-90f6-d33f547af249" bpmnElement="sid-8bcb7238-381f-44de-a15e-9383a1ce87ff">
<omgdc:Bounds x="185.0" y="-90.0" width="100.0" height="80.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-ddc7e7d5-044e-4ce9-830e-b0921fc0cbda" bpmnElement="sid-056352d4-51aa-4085-a70d-5ec91e43fc66">
<omgdi:waypoint x="155.0" y="-50.0"/>
<omgdi:waypoint x="185.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-d7a76d6d-7fe6-43fe-9a6a-c09d545d4dc5" bpmnElement="sid-195839b5-9aba-4f88-bdee-e5df5ad2c2a4">
<omgdc:Bounds x="310.0" y="-70.0" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-12b62d3a-142a-49ca-9903-f8bc4df3b10f" bpmnElement="sid-b28430a5-602d-4c9d-b819-948ed23545cc">
<omgdi:waypoint x="285.0" y="-50.0"/>
<omgdi:waypoint x="310.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-79f0624f-8ab4-445e-945a-de7cafc5f313" bpmnElement="sid-f459d33d-12a8-4279-b25e-2d2d57b256f9">
<omgdc:Bounds x="375.0" y="-90.0" width="100.0" height="80.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-dfe05972-7070-4517-8fe5-69a0c496d792" bpmnElement="sid-cf57e667-8f81-4b49-9120-36c043b3d9e5">
<omgdi:waypoint x="350.0" y="-50.0"/>
<omgdi:waypoint x="375.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-f59ab901-9f2f-4dd1-8585-9809ee002f74" bpmnElement="sid-1d4e06ca-4162-4149-902b-569779071f60">
<omgdc:Bounds x="500.0" y="-70.0" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-35b0e701-7c6f-4713-9cd4-1b7610ada790" bpmnElement="sid-baf4a875-3935-4cdc-986d-5e00ca04ddd3">
<omgdi:waypoint x="475.0" y="-50.0"/>
<omgdi:waypoint x="500.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-371579fd-e389-4cc8-bffb-1cc3f09edb64" bpmnElement="sid-fc053c4d-804f-41c9-af47-cd77600cf6d1">
<omgdc:Bounds x="565.0" y="-90.0" width="100.0" height="80.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-8f7d80ae-4841-4d71-a9df-bc056536df8b" bpmnElement="sid-4bd9e242-081a-4b2b-a88c-7d85b003f057">
<omgdi:waypoint x="540.0" y="-50.0"/>
<omgdi:waypoint x="565.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-10cc8ec7-b8a3-454a-8449-833944e81136" bpmnElement="sid-fefd80fb-f234-4fea-87e7-de958f25111a">
<omgdc:Bounds x="700.0" y="-70.0" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-aaf9b4c5-0258-4d6c-a6c6-753e3504ba3c" bpmnElement="sid-94b6733c-43b0-4f04-9228-7b654b531a43">
<omgdi:waypoint x="665.0" y="-50.0"/>
<omgdi:waypoint x="700.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-8f6d3c34-5a10-44b6-8f95-36481a744d50" bpmnElement="sid-e569a71d-ffa4-4d1e-ae7e-0ea24cb6df8c">
<omgdc:Bounds x="765.0" y="-90.0" width="100.0" height="80.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-5989d9bc-33f3-409f-b0df-8c9bb826f3c0" bpmnElement="sid-9fea5c28-bd1d-4134-b7c2-13a19662ddcb">
<omgdi:waypoint x="740.0" y="-50.0"/>
<omgdi:waypoint x="765.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-36ea8220-5418-4faa-9210-4ab8999a804b" bpmnElement="sid-c5ac1290-2bb7-437a-a7c0-8d69c023c7eb">
<omgdc:Bounds x="895.0" y="-70.0" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-9773a344-d784-473c-8dc6-e4d3a1991d92" bpmnElement="sid-9ca041df-ee5e-44b8-b127-04f1fb2cb6f5">
<omgdi:waypoint x="865.0" y="-50.0"/>
<omgdi:waypoint x="895.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-cbe02d86-ae49-4508-bbe4-e163d81abbfd" bpmnElement="sid-80b49dd1-7efb-452f-a00b-bc15b978b4d7">
<omgdc:Bounds x="970.0" y="-65.0" width="30.0" height="30.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-7793527a-0dcb-4e1d-9cff-ed5be7df24d1" bpmnElement="sid-9c23b612-1e5b-4926-afda-7e85c507f791">
<omgdi:waypoint x="935.0" y="-50.0"/>
<omgdi:waypoint x="970.0" y="-50.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-54827309-6778-47a0-a07c-2f05232b381b" bpmnElement="sid-a59cd2c2-e417-452c-a7fc-b3afa7c58757">
<omgdi:waypoint x="330.0" y="-30.0"/>
<omgdi:waypoint x="330.0" y="35.000004"/>
<omgdi:waypoint x="-360.0" y="35.0"/>
<omgdi:waypoint x="-360.0" y="-10.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-cccfb85b-ece2-4fe2-bc84-4fcbc31d0e6d" bpmnElement="sid-798b2b60-d54a-4b78-8a2a-bbaa3be7ecc7">
<omgdi:waypoint x="519.99994" y="-30.0"/>
<omgdi:waypoint x="520.0" y="35.0"/>
<omgdi:waypoint x="-359.99997" y="35.0"/>
<omgdi:waypoint x="-360.0" y="-10.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-05bdb793-1853-45f4-8f59-beedd4f23404" bpmnElement="sid-752481d2-cd8d-40db-a484-7bd8ac2f4fb0">
<omgdi:waypoint x="719.99994" y="-30.0"/>
<omgdi:waypoint x="720.00006" y="35.0"/>
<omgdi:waypoint x="-360.00003" y="35.0"/>
<omgdi:waypoint x="-360.0" y="-10.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-cc7382b4-ef2c-4593-a20e-54b9204aeec4" bpmnElement="sid-8e51b2ce-691e-4fca-a617-682b17d51118">
<omgdi:waypoint x="914.99994" y="-30.0"/>
<omgdi:waypoint x="914.99994" y="34.999996"/>
<omgdi:waypoint x="-360.00012" y="35.0"/>
<omgdi:waypoint x="-360.0" y="-10.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>