提交 304442fd authored 作者: 1239068511@qq.com's avatar 1239068511@qq.com

[工作流] 增了 1. 中止流程

2. 流程运行中,页面和流程图无法被修改
上级 9ba8f039
...@@ -19,7 +19,6 @@ import java.util.Date; ...@@ -19,7 +19,6 @@ import java.util.Date;
public abstract class BaseEntity { public abstract class BaseEntity {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ApiModelProperty("主键") @ApiModelProperty("主键")
protected Integer id; protected Integer id;
......
package com.tykj.workflowcore.workflow_editer.controller; package com.tykj.workflowcore.workflow_editer.controller;
import com.tykj.workflowcore.base.result.ApiException;
import com.tykj.workflowcore.base.result.ResultUtil; import com.tykj.workflowcore.base.result.ResultUtil;
import com.tykj.workflowcore.workflow_editer.entity.FlowsInfo; import com.tykj.workflowcore.workflow_editer.entity.FlowsInfo;
import com.tykj.workflowcore.workflow_editer.entity.VariableStorage;
import com.tykj.workflowcore.workflow_editer.entity.vo.*; import com.tykj.workflowcore.workflow_editer.entity.vo.*;
import com.tykj.workflowcore.workflow_editer.service.*; import com.tykj.workflowcore.workflow_editer.service.*;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -15,6 +18,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -15,6 +18,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamException;
import java.io.IOException; import java.io.IOException;
import java.util.List;
/** /**
...@@ -34,6 +38,9 @@ public class FlowsInfoController { ...@@ -34,6 +38,9 @@ public class FlowsInfoController {
@Autowired @Autowired
private WorkFlowService workFlowService; private WorkFlowService workFlowService;
@Autowired
private RuntimeService runtimeService;
@PostMapping("/searchAllFlowInfo") @PostMapping("/searchAllFlowInfo")
...@@ -56,17 +63,21 @@ public class FlowsInfoController { ...@@ -56,17 +63,21 @@ public class FlowsInfoController {
return workFlowService.upLoadFile(file); return workFlowService.upLoadFile(file);
} }
@GetMapping("editFlow") @GetMapping("/editFlow")
@ApiOperation(value = "编辑流程") @ApiOperation(value = "根据ID查询流程详情")
public ResponseEntity editFlow(Integer id){ public ResponseEntity editFlow(Integer id){
return ResultUtil.success(flowInfoService.editFlow(id),"查询成功"); return ResultUtil.success(flowInfoService.editFlow(id),"查询成功");
} }
@PostMapping("/saveXml") @PostMapping("/saveXml")
@ApiOperation(value = "保存xml以及其他流程信息") @ApiOperation(value = "保存xml以及其他流程信息")
public ResponseEntity saveXml(@RequestBody FlowsInfoVo flowsInfoVo) throws IOException, XMLStreamException { public ResponseEntity saveXml(@RequestBody FlowsInfoVo flowsInfoVo) throws IOException, XMLStreamException {
//验证一下是否为更新,如果为更新的话,先判断该流程是否存在未运行完成的流程,如果的话则拒绝更新
List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().processDefinitionKey(flowsInfoVo.getFlowKey()).list();
if (list.size()>0){
throw new ApiException("存在正在运行的流程实例,请先将正在运行的流程实例全部完结后才可以进行修改");
}
//保存节点信息 //保存节点信息
// nodeInfoService.saveNodeInfoList(flowsInfoVo.getNodeInfoList()); // nodeInfoService.saveNodeInfoList(flowsInfoVo.getNodeInfoList());
//保存xml信息 //保存xml信息
...@@ -95,4 +106,5 @@ public class FlowsInfoController { ...@@ -95,4 +106,5 @@ public class FlowsInfoController {
} }
} }
package com.tykj.workflowcore.workflow_editer.controller; package com.tykj.workflowcore.workflow_editer.controller;
import com.tykj.workflowcore.base.result.ApiException;
import com.tykj.workflowcore.base.result.ResultUtil; import com.tykj.workflowcore.base.result.ResultUtil;
import com.tykj.workflowcore.workflow_editer.entity.FormPage; import com.tykj.workflowcore.workflow_editer.entity.FormPage;
import com.tykj.workflowcore.workflow_editer.entity.vo.FormPageVo; import com.tykj.workflowcore.workflow_editer.entity.vo.FormPageVo;
...@@ -7,6 +8,7 @@ import com.tykj.workflowcore.workflow_editer.entity.vo.PageFormPageVo; ...@@ -7,6 +8,7 @@ import com.tykj.workflowcore.workflow_editer.entity.vo.PageFormPageVo;
import com.tykj.workflowcore.workflow_editer.service.FormPageService; import com.tykj.workflowcore.workflow_editer.service.FormPageService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -28,10 +30,12 @@ public class FormPageController { ...@@ -28,10 +30,12 @@ public class FormPageController {
@Autowired @Autowired
private FormPageService formPageService; private FormPageService formPageService;
@ApiOperation("保存页面") @ApiOperation("保存页面")
@PostMapping("/savePage") @PostMapping("/savePage")
public ResponseEntity savePage(@RequestBody FormPageVo inFormPageVo){ public ResponseEntity savePage(@RequestBody FormPageVo inFormPageVo){
if (StringUtils.isEmpty(inFormPageVo.getProcessKey())){
throw new ApiException("processKey不能为空");
}
if (inFormPageVo.getId() == null){ if (inFormPageVo.getId() == null){
Integer pageId = formPageService.savePage(inFormPageVo); Integer pageId = formPageService.savePage(inFormPageVo);
return ResultUtil.success(pageId,"页面保存成功"); return ResultUtil.success(pageId,"页面保存成功");
...@@ -55,6 +59,12 @@ public class FormPageController { ...@@ -55,6 +59,12 @@ public class FormPageController {
return ResultUtil.success(formPageService.getAllPages(pageFormPageVo),"查询成功"); return ResultUtil.success(formPageService.getAllPages(pageFormPageVo),"查询成功");
} }
@ApiOperation("查看列表")
@PostMapping("/findList")
public ResponseEntity findList(@RequestBody PageFormPageVo pageFormPageVo){
return ResultUtil.success(formPageService.getAllList(pageFormPageVo),"查询成功");
}
@ApiOperation("删除页面") @ApiOperation("删除页面")
@DeleteMapping("deletePage") @DeleteMapping("deletePage")
public ResponseEntity deletePage(Integer id){ public ResponseEntity deletePage(Integer id){
......
...@@ -105,4 +105,13 @@ public class WorkFlowController { ...@@ -105,4 +105,13 @@ public class WorkFlowController {
return startByUser; return startByUser;
} }
@GetMapping("/stopProcessInstance")
@ApiOperation("中止流程")
public ResponseEntity stopProcessInstance(String processInstanceId) {
workFlowService.stopProcessInstanceById(processInstanceId);
return ResultUtil.success("停止成功");
}
} }
...@@ -38,13 +38,37 @@ public class DataHistory extends BaseEntity { ...@@ -38,13 +38,37 @@ public class DataHistory extends BaseEntity {
@ApiModelProperty("页面id") @ApiModelProperty("页面id")
private String pageId; private String pageId;
@ApiModelProperty("页面名称")
private String pageName;
@ApiModelProperty("页面描述")
private String pageDesc;
@ApiModelProperty("模板")
@Lob
private String template;
@ApiModelProperty("页面js")
@Lob
private String js;
@ApiModelProperty("页面css")
@Lob
private String css;
@ApiModelProperty("json描述文件")
@Lob
private String descFile;
@ApiModelProperty("变量数据") @ApiModelProperty("变量数据")
@Lob @Lob
private String datas; private String datas;
@ApiModelProperty("用户id") @ApiModelProperty("页面操作用户id")
private Integer userId; private Integer userId;
} }
...@@ -56,8 +56,8 @@ public class FlowsInfo extends BaseEntity { ...@@ -56,8 +56,8 @@ public class FlowsInfo extends BaseEntity {
@ApiModelProperty("流程描述") @ApiModelProperty("流程描述")
private String flowDescribe; private String flowDescribe;
// @ApiModelProperty("开始节点的id") @ApiModelProperty("页面ID,示例 1,2,3,4")
// private String startId; private String pageIds;
@ApiModelProperty("开始节点页面的id") @ApiModelProperty("开始节点页面的id")
private Integer startPageId; private Integer startPageId;
......
...@@ -34,12 +34,6 @@ import java.util.stream.Collectors; ...@@ -34,12 +34,6 @@ import java.util.stream.Collectors;
@Api("表单页面") @Api("表单页面")
public class FormPage extends BaseEntity { public class FormPage extends BaseEntity {
@ApiModelProperty("页面标识,区别与数据库ID 该标识用于区分是否为同一张页面的不同版本")
private String pageIdentification;
@ApiModelProperty("版本号")
private Integer version;
@ApiModelProperty("页面名称") @ApiModelProperty("页面名称")
private String pageName; private String pageName;
......
...@@ -38,6 +38,8 @@ public class FlowsInfoVo { ...@@ -38,6 +38,8 @@ public class FlowsInfoVo {
@ApiModelProperty @ApiModelProperty
private String fileXml; private String fileXml;
public FlowsInfo toEntity(){ public FlowsInfo toEntity(){
FlowsInfo flowsInfo = new FlowsInfo(); FlowsInfo flowsInfo = new FlowsInfo();
BeanUtils.copyProperties(this,flowsInfo); BeanUtils.copyProperties(this,flowsInfo);
......
...@@ -55,6 +55,9 @@ public class FormPageVo { ...@@ -55,6 +55,9 @@ public class FormPageVo {
@Lob @Lob
private String descFile; private String descFile;
@ApiModelProperty("所属流程key")
private String processKey;
@ApiModelProperty("实体类") @ApiModelProperty("实体类")
private List<String> entityIds; private List<String> entityIds;
......
...@@ -32,12 +32,6 @@ public class PageFormPageVo extends JpaCustomPage { ...@@ -32,12 +32,6 @@ public class PageFormPageVo extends JpaCustomPage {
@ApiModelProperty("页面创建时间") @ApiModelProperty("页面创建时间")
private Date createTime; private Date createTime;
@ApiModelProperty("页面标识,区别与数据库ID 该标识用于区分是否为同一张页面的不同版本")
private String pageIdentification;
@ApiModelProperty("版本号")
private Integer version;
@ApiModelProperty("所属流程key") @ApiModelProperty("所属流程key")
private String processKey; private String processKey;
......
...@@ -23,7 +23,7 @@ public class SuspendVo { ...@@ -23,7 +23,7 @@ public class SuspendVo {
private Integer id; private Integer id;
/** /**
* 是否可用 0 挂起 1 激活 * 是否可用 0 激活 1 挂起
*/ */
private int state; private int state;
......
...@@ -74,11 +74,12 @@ public interface FlowInfoService { ...@@ -74,11 +74,12 @@ public interface FlowInfoService {
Page<FlowsInfo> searchFlowInfo(SearchFlowInfoVo searchFlowInfoVo); Page<FlowsInfo> searchFlowInfo(SearchFlowInfoVo searchFlowInfoVo);
/** /**
* 编辑流程 * 根据ID查询流程详情
* @param id 流程id * @param id 流程id
* @return * @return
*/ */
FlowsInfo editFlow(Integer id); FlowsInfo editFlow(Integer id);
} }
...@@ -5,6 +5,7 @@ import com.tykj.workflowcore.workflow_editer.entity.FormPage; ...@@ -5,6 +5,7 @@ import com.tykj.workflowcore.workflow_editer.entity.FormPage;
import com.tykj.workflowcore.workflow_editer.entity.vo.FormPageVo; import com.tykj.workflowcore.workflow_editer.entity.vo.FormPageVo;
import com.tykj.workflowcore.workflow_editer.entity.vo.PageFormPageVo; import com.tykj.workflowcore.workflow_editer.entity.vo.PageFormPageVo;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import java.util.List; import java.util.List;
...@@ -39,21 +40,6 @@ public interface FormPageService { ...@@ -39,21 +40,6 @@ public interface FormPageService {
*/ */
FormPage getPage(Integer id); FormPage getPage(Integer id);
/**
* 根据流程Id来进行回显 返回最新的一个版本的列表
* @param processKey 页面id
* @return 页面信息
*/
List<FormPage> getPageNewByProcessKey(String processKey);
/**
* 根据页面标识来进行回显 返回最新的一个版本的列表
* @param pageIdentification 页面标识
* @return 页面信息
*/
List<FormPage> getPageNewByPageIdentification(String pageIdentification);
/** /**
* 根据页面id删除页面 * 根据页面id删除页面
* @param id 页面id * @param id 页面id
...@@ -67,5 +53,9 @@ public interface FormPageService { ...@@ -67,5 +53,9 @@ public interface FormPageService {
*/ */
Page<FormPage> getAllPages(PageFormPageVo pageFormPageVo); Page<FormPage> getAllPages(PageFormPageVo pageFormPageVo);
List<FormPage> getAllList(PageFormPageVo pageFormPageVo);
Specification<FormPage> specificationBuild(PageFormPageVo pageFormPageVo);
} }
...@@ -3,6 +3,7 @@ package com.tykj.workflowcore.workflow_editer.service; ...@@ -3,6 +3,7 @@ package com.tykj.workflowcore.workflow_editer.service;
import com.tykj.workflowcore.workflow_editer.entity.FlowsInfo; import com.tykj.workflowcore.workflow_editer.entity.FlowsInfo;
import com.tykj.workflowcore.workflow_editer.entity.vo.*; import com.tykj.workflowcore.workflow_editer.entity.vo.*;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -159,6 +160,18 @@ public interface WorkFlowService { ...@@ -159,6 +160,18 @@ public interface WorkFlowService {
List<HistoricProcessInstance> findStartByUser(String userId); List<HistoricProcessInstance> findStartByUser(String userId);
/**
* 中止流程
* @param processInstanceId
*/
void stopProcessInstanceById(String processInstanceId);
/**
* 根据processKey 查询正在运行中的流程实例
* @param processKey 流程Key
*/
List<ProcessInstance> queryUnfinishedProcessInstance(String processKey);
} }
...@@ -9,12 +9,22 @@ import com.tykj.workflowcore.workflow_editer.entity.vo.FlowsInfoVo; ...@@ -9,12 +9,22 @@ import com.tykj.workflowcore.workflow_editer.entity.vo.FlowsInfoVo;
import com.tykj.workflowcore.workflow_editer.entity.vo.SearchAllFlowInfoVo; import com.tykj.workflowcore.workflow_editer.entity.vo.SearchAllFlowInfoVo;
import com.tykj.workflowcore.workflow_editer.entity.vo.SearchFlowInfoVo; import com.tykj.workflowcore.workflow_editer.entity.vo.SearchFlowInfoVo;
import com.tykj.workflowcore.workflow_editer.service.FlowInfoService; import com.tykj.workflowcore.workflow_editer.service.FlowInfoService;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.EndEvent;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.Process;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import java.util.Optional; import java.util.*;
import java.util.stream.Collectors;
/** /**
* ClassName: FlowInfoServiceImpl * ClassName: FlowInfoServiceImpl
...@@ -25,11 +35,18 @@ import java.util.Optional; ...@@ -25,11 +35,18 @@ import java.util.Optional;
* @Author: zsp * @Author: zsp
*/ */
@Service @Service
@Slf4j
public class FlowInfoServiceImpl implements FlowInfoService { public class FlowInfoServiceImpl implements FlowInfoService {
@Autowired @Autowired
private FlowsInfoMapper flowsInfoMapper; private FlowsInfoMapper flowsInfoMapper;
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Override @Override
public FlowsInfo findById(Integer id) { public FlowsInfo findById(Integer id) {
return flowsInfoMapper.findById(id).get(); return flowsInfoMapper.findById(id).get();
...@@ -99,9 +116,16 @@ public class FlowInfoServiceImpl implements FlowInfoService { ...@@ -99,9 +116,16 @@ public class FlowInfoServiceImpl implements FlowInfoService {
return flowsInfoMapper.findAll(and.build(), searchFlowInfoVo.getPageable()); return flowsInfoMapper.findAll(and.build(), searchFlowInfoVo.getPageable());
} }
/**
* 根据ID查询流程详情
* @param id 流程id
* @return
*/
@Override @Override
public FlowsInfo editFlow(Integer id) { public FlowsInfo editFlow(Integer id) {
return flowsInfoMapper.findById(id).get(); return flowsInfoMapper.findById(id).get();
} }
} }
package com.tykj.workflowcore.workflow_editer.service.impl; package com.tykj.workflowcore.workflow_editer.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.github.wenhao.jpa.PredicateBuilder; import com.github.wenhao.jpa.PredicateBuilder;
import com.github.wenhao.jpa.Specifications; import com.github.wenhao.jpa.Specifications;
import com.tykj.workflowcore.model.entity.TableInfo; import com.tykj.workflowcore.base.result.ApiException;
import com.tykj.workflowcore.workflow_editer.dao.FormPageMapper; import com.tykj.workflowcore.workflow_editer.dao.FormPageMapper;
import com.tykj.workflowcore.workflow_editer.entity.FlowsInfo;
import com.tykj.workflowcore.workflow_editer.entity.FormPage; import com.tykj.workflowcore.workflow_editer.entity.FormPage;
import com.tykj.workflowcore.workflow_editer.entity.vo.FormPageVo; import com.tykj.workflowcore.workflow_editer.entity.vo.FormPageVo;
import com.tykj.workflowcore.workflow_editer.entity.vo.PageFormPageVo; import com.tykj.workflowcore.workflow_editer.entity.vo.PageFormPageVo;
import com.tykj.workflowcore.workflow_editer.service.FlowInfoService;
import com.tykj.workflowcore.workflow_editer.service.FormPageService; import com.tykj.workflowcore.workflow_editer.service.FormPageService;
import com.tykj.workflowcore.workflow_editer.service.WorkFlowService;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -28,21 +35,49 @@ import java.util.*; ...@@ -28,21 +35,49 @@ import java.util.*;
@Service @Service
public class FormPageServiceImpl implements FormPageService { public class FormPageServiceImpl implements FormPageService {
@Autowired
RuntimeService runtimeService;
@Autowired @Autowired
private FormPageMapper formPageMapper; private FormPageMapper formPageMapper;
@Autowired
FlowInfoService flowInfoService;
@Autowired
RepositoryService repositoryService;
@Autowired
WorkFlowService workFlowService;
@Override @Override
public Integer savePage(@RequestBody FormPageVo inFormPageVo) { public Integer savePage(@RequestBody FormPageVo inFormPageVo) {
inFormPageVo.setCreateTime(new Date()); inFormPageVo.setCreateTime(new Date());
FormPage formPage = inFormPageVo.toEntity(); FormPage formPage = inFormPageVo.toEntity();
formPage.setPageIdentification(UUID.randomUUID().toString()); FormPage formPageSave = formPageMapper.save(formPage);
FormPage formPage1 = formPageMapper.save(formPage); Integer id = formPageSave.getId();
Integer id = formPage1.getId();
return id; return id;
} }
@Override @Override
public void update(FormPage formPage) { public void update(FormPage formPage) {
//查询对应的processKey
FlowsInfo byFlowKey = flowInfoService.findByFlowKey(formPage.getProcessKey());
JSONArray pageIdArrays = JSONArray.parseArray(byFlowKey.getPageIds());
if (pageIdArrays.contains(formPage.getId())){
//判断 byFlowKey 是否正在运行
Integer state = byFlowKey.getState();
// 0代表这个流程正在运行过程中
if (state == 0){
throw new ApiException("该页面正在流程中运行,无法被修改");
}
//判断该流程是否存在正在运行的流程实例如果存在将不允许修改页面
List<ProcessInstance> processInstances = workFlowService.queryUnfinishedProcessInstance(formPage.getProcessKey());
if (processInstances.size()>0){
throw new ApiException("该页面正在流程中运行,无法被修改.请先停止所有正在运行的流程实例");
}
}
formPageMapper.save(formPage); formPageMapper.save(formPage);
} }
...@@ -53,37 +88,34 @@ public class FormPageServiceImpl implements FormPageService { ...@@ -53,37 +88,34 @@ public class FormPageServiceImpl implements FormPageService {
} }
@Override @Override
public List<FormPage> getPageNewByProcessKey(String processKey) { public void deletePage(Integer id) {
//构建查询Vo FormPage formPage = formPageMapper.findById(id).get();
return formPageMapper.findNewFromPageByProcessKey(processKey); formPageMapper.delete(formPage);
} }
@Override @Override
public List<FormPage> getPageNewByPageIdentification(String pageIdentification) { public Page<FormPage> getAllPages(PageFormPageVo pageFormPageVo) {
Specification<FormPage> formPageSpecification = specificationBuild(pageFormPageVo);
return null; Page<FormPage> formPagePage = formPageMapper.findAll(formPageSpecification, pageFormPageVo.getPageable());
return formPagePage;
} }
@Override @Override
public void deletePage(Integer id) { public List<FormPage> getAllList(PageFormPageVo pageFormPageVo) {
FormPage formPage = formPageMapper.findById(id).get(); Specification<FormPage> formPageSpecification = specificationBuild(pageFormPageVo);
formPageMapper.delete(formPage); List<FormPage> all = formPageMapper.findAll(formPageSpecification);
return all;
} }
@Override @Override
public Page<FormPage> getAllPages(PageFormPageVo pageFormPageVo) { public Specification<FormPage> specificationBuild(PageFormPageVo pageFormPageVo) {
PredicateBuilder<FormPage> and = Specifications.and(); PredicateBuilder<FormPage> and = Specifications.and();
and.eq(pageFormPageVo.getPageName()!=null,"pageName",pageFormPageVo.getPageName()); and.eq(pageFormPageVo.getPageName()!=null,"pageName",pageFormPageVo.getPageName());
and.eq(pageFormPageVo.getPageDesc()!=null,"pageDesc",pageFormPageVo.getPageDesc()); and.eq(pageFormPageVo.getPageDesc()!=null,"pageDesc",pageFormPageVo.getPageDesc());
and.eq(pageFormPageVo.getCreateTime()!=null,"createTime",pageFormPageVo.getCreateTime()); and.eq(pageFormPageVo.getCreateTime()!=null,"createTime",pageFormPageVo.getCreateTime());
and.eq(pageFormPageVo.getCreateTime()!=null,"processKey",pageFormPageVo.getProcessKey()); and.eq(pageFormPageVo.getCreateTime()!=null,"processKey",pageFormPageVo.getProcessKey());
and.eq(pageFormPageVo.getCreateTime()!=null,"version",pageFormPageVo.getVersion()); return and.build();
and.eq(pageFormPageVo.getCreateTime()!=null,"pageIdentification",pageFormPageVo.getPageIdentification());
Page<FormPage> formPagePage = formPageMapper.findAll(and.build(), pageFormPageVo.getPageable());
return formPagePage;
} }
} }
...@@ -13,6 +13,7 @@ import com.tykj.workflowcore.workflow_editer.service.WorkFlowService; ...@@ -13,6 +13,7 @@ import com.tykj.workflowcore.workflow_editer.service.WorkFlowService;
import com.tykj.workflowcore.workflow_editer.util.MapUtils; import com.tykj.workflowcore.workflow_editer.util.MapUtils;
import com.tykj.workflowcore.workflow_editer.util.UserServiceBeanUtil; import com.tykj.workflowcore.workflow_editer.util.UserServiceBeanUtil;
import com.tykj.workflowcore.workflow_editer.validate.ProcessValidatorFactoryExt; import com.tykj.workflowcore.workflow_editer.validate.ProcessValidatorFactoryExt;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.converter.BpmnXMLConverter; import org.flowable.bpmn.converter.BpmnXMLConverter;
import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.*;
...@@ -21,6 +22,7 @@ import org.flowable.engine.*; ...@@ -21,6 +22,7 @@ import org.flowable.engine.*;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.Deployment;
import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery; import org.flowable.task.api.TaskQuery;
...@@ -29,6 +31,7 @@ import org.flowable.validation.ProcessValidator; ...@@ -29,6 +31,7 @@ import org.flowable.validation.ProcessValidator;
import org.flowable.validation.ValidationError; import org.flowable.validation.ValidationError;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -40,6 +43,7 @@ import javax.xml.stream.XMLStreamReader; ...@@ -40,6 +43,7 @@ import javax.xml.stream.XMLStreamReader;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/** /**
* ClassName: FlowableServiceImpl * ClassName: FlowableServiceImpl
...@@ -50,6 +54,7 @@ import java.util.concurrent.ConcurrentHashMap; ...@@ -50,6 +54,7 @@ import java.util.concurrent.ConcurrentHashMap;
* @Author: zsp * @Author: zsp
*/ */
@Service @Service
@Slf4j
public class WorkFlowServiceImpl implements WorkFlowService { public class WorkFlowServiceImpl implements WorkFlowService {
private static String XML_FILE_PATH = File.separator+"xml"+File.separator; private static String XML_FILE_PATH = File.separator+"xml"+File.separator;
...@@ -214,6 +219,9 @@ public class WorkFlowServiceImpl implements WorkFlowService { ...@@ -214,6 +219,9 @@ public class WorkFlowServiceImpl implements WorkFlowService {
FileUtil.createFileByString(BASE_PATH + XML_FILE_PATH + CustomFlowXmlResourceName, flowsInfoVo.getFileXml()); FileUtil.createFileByString(BASE_PATH + XML_FILE_PATH + CustomFlowXmlResourceName, flowsInfoVo.getFileXml());
//获取bmpnModel //获取bmpnModel
BpmnModel bpmnModel = getBpmnModel(file); BpmnModel bpmnModel = getBpmnModel(file);
//获取流程中所有的页面ID
List<String> pageIds = getPageIds(bpmnModel);
flowsInfo.setPageIds(pageIds.toString());
//设置开始节点id //设置开始节点id
flowsInfo.setStartPageId(getStartPageId(bpmnModel)); flowsInfo.setStartPageId(getStartPageId(bpmnModel));
//进行第一次的校验 //进行第一次的校验
...@@ -224,6 +232,24 @@ public class WorkFlowServiceImpl implements WorkFlowService { ...@@ -224,6 +232,24 @@ public class WorkFlowServiceImpl implements WorkFlowService {
flowsInfoMapper.save(flowsInfo); flowsInfoMapper.save(flowsInfo);
} }
public List<String> getPageIds(BpmnModel bpmnModel){
ArrayList<String> result = new ArrayList<>();
List<Process> processes = bpmnModel.getProcesses();
for (Process process : processes) {
Collection<FlowElement> flowElements = process.getFlowElements();
for (FlowElement flowElement : flowElements) {
if (flowElement instanceof StartEvent){
result.add(((StartEvent) flowElement).getFormKey());
}
if (flowElement instanceof UserTask){
result.add(((UserTask) flowElement).getFormKey());
}
}
}
return result;
}
/** /**
* 获取流程开始页面的ID * 获取流程开始页面的ID
* @param bpmnModel * @param bpmnModel
...@@ -245,6 +271,7 @@ public class WorkFlowServiceImpl implements WorkFlowService { ...@@ -245,6 +271,7 @@ public class WorkFlowServiceImpl implements WorkFlowService {
return -1; return -1;
} }
/** /**
* 获取bpmnModel * 获取bpmnModel
* @param xmlFile * @param xmlFile
...@@ -262,6 +289,7 @@ public class WorkFlowServiceImpl implements WorkFlowService { ...@@ -262,6 +289,7 @@ public class WorkFlowServiceImpl implements WorkFlowService {
return converter.convertToBpmnModel(reader); return converter.convertToBpmnModel(reader);
} }
public void checkXml(BpmnModel bpmnModel){ public void checkXml(BpmnModel bpmnModel){
//做校验 //做校验
ProcessValidator defaultProcessValidator = processValidatorFactoryExt.createDefaultProcessValidator(); ProcessValidator defaultProcessValidator = processValidatorFactoryExt.createDefaultProcessValidator();
...@@ -392,7 +420,6 @@ public class WorkFlowServiceImpl implements WorkFlowService { ...@@ -392,7 +420,6 @@ public class WorkFlowServiceImpl implements WorkFlowService {
ConcurrentHashMap flowMap = new ConcurrentHashMap<>(); ConcurrentHashMap flowMap = new ConcurrentHashMap<>();
ConcurrentHashMap oldFlowMap = new ConcurrentHashMap<>(); ConcurrentHashMap oldFlowMap = new ConcurrentHashMap<>();
ConcurrentHashMap userMap = new ConcurrentHashMap<>(); ConcurrentHashMap userMap = new ConcurrentHashMap<>();
Task task = taskService.createTaskQuery().taskId(taskVo.getTaskId()).singleResult(); Task task = taskService.createTaskQuery().taskId(taskVo.getTaskId()).singleResult();
if (task==null){ if (task==null){
throw new ApiException(null,"该任务已经被完成了"); throw new ApiException(null,"该任务已经被完成了");
...@@ -573,4 +600,38 @@ public class WorkFlowServiceImpl implements WorkFlowService { ...@@ -573,4 +600,38 @@ public class WorkFlowServiceImpl implements WorkFlowService {
return map; return map;
} }
@Override
public void stopProcessInstanceById(String processInstanceId) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
if (processInstance != null) {
//1、获取终止节点
List<EndEvent> endNodes =findEndFlowElement(processInstance.getProcessDefinitionId());
String endId = endNodes.get(0).getId();
//2、执行终止
List<Execution> executions = runtimeService.createExecutionQuery().parentId(processInstanceId).list();
List<String> executionIds = new ArrayList<>();
executions.forEach(execution -> executionIds.add(execution.getId()));
runtimeService.createChangeActivityStateBuilder().moveExecutionsToSingleActivityId(executionIds, endId).changeState();
log.info("终止processInstanceId:{}胜利",processInstanceId);
}else {
log.info("不存在运行的流程实例processInstanceId:{},请确认!",processInstanceId);
}
}
public List findEndFlowElement(String processDefId) {
Process mainProcess = repositoryService.getBpmnModel(processDefId).getMainProcess();
Collection<FlowElement> list = mainProcess.getFlowElements();
if (CollectionUtils.isEmpty(list)) {
return Collections.EMPTY_LIST;
}
return list.stream().filter(f -> f instanceof EndEvent).collect(Collectors.toList());
}
@Override
public List<ProcessInstance> queryUnfinishedProcessInstance(String processKey){
List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().processDefinitionKey(processKey).list();
return list;
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论