1、工作流基本代码编写

2、解决引入工作流maven中mybatis依赖冲突问题
pull/254/head
xjs 3 years ago
parent 71f0c8d575
commit 0f6ad79c8c

@ -1,16 +1,16 @@
package com.ruoyi.file.utils;
package com.ruoyi.common.core.utils.file;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.core.exception.file.FileNameLengthLimitExceededException;
import com.ruoyi.common.core.exception.file.FileSizeLimitExceededException;
import com.ruoyi.common.core.exception.file.InvalidExtensionException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.IdUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.file.MimeTypeUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
/**
*

@ -3,7 +3,7 @@ package com.ruoyi.file.service;
import cn.hutool.core.date.DateUtil;
import com.aliyun.oss.OSS;
import com.ruoyi.common.core.text.UUID;
import com.ruoyi.file.utils.FileUploadUtils;
import com.ruoyi.common.core.utils.file.FileUploadUtils;
import com.ruoyi.file.utils.OssClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;

@ -2,7 +2,7 @@ package com.ruoyi.file.service;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.file.config.FtpProperties;
import com.ruoyi.file.utils.FileUploadUtils;
import com.ruoyi.common.core.utils.file.FileUploadUtils;
import com.ruoyi.file.utils.FtpUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@ -1,6 +1,6 @@
package com.ruoyi.file.service;
import com.ruoyi.file.utils.FileUploadUtils;
import com.ruoyi.common.core.utils.file.FileUploadUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

@ -4,7 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.file.config.MinioConfig;
import com.ruoyi.file.utils.FileUploadUtils;
import com.ruoyi.common.core.utils.file.FileUploadUtils;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;

@ -28,6 +28,15 @@
<artifactId>activiti-dependencies</artifactId>
<type>pom</type>
</dependency>
<!--解决activiti自带mybatis依赖冲突问题
路径优先原则
直接依赖优于传递依赖。如果传递依赖的Jar包版本冲突了那么可以单独声明一个指定版本的依赖Jar包即可解决冲突。
例如b引用了a的0.0.1版本c引用了b的0.0.2版本如果我们想用的版本是0.0.3版本可以直接单独声明一个a的0.0.3版本。-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>com.xjs</groupId>

@ -0,0 +1,34 @@
package com.xjs.activiti.controller;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.xjs.activiti.domain.dto.ActivitiHighLineDTO;
import com.xjs.activiti.service.IActivitiHistoryService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/activitiHistory")
@Api(tags = "工作流-历史流程")
public class ActivitiHistoryController {
@Autowired
private IActivitiHistoryService activitiHistoryService;
//流程图高亮
@GetMapping("/gethighLine")
public AjaxResult gethighLine(@RequestParam("instanceId") String instanceId) {
ActivitiHighLineDTO activitiHighLineDTO = activitiHistoryService.gethighLine(instanceId);
return AjaxResult.success(activitiHighLineDTO);
}
}

@ -0,0 +1,24 @@
package com.xjs.activiti.controller;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.xjs.activiti.service.IFormHistoryDataService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(tags = "工作流-历史表格数据")
@RequestMapping("/historyFromData")
public class HistoryFormDataCoroller {
@Autowired
private IFormHistoryDataService formHistoryDataService;
@GetMapping(value = "/ByInstanceId/{instanceId}")
public AjaxResult historyFromData(@PathVariable("instanceId") String instanceId) {
return AjaxResult.success(formHistoryDataService.historyDataShow(instanceId));
}
}

@ -0,0 +1,143 @@
package com.xjs.activiti.controller;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageDomain;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.core.web.page.TableSupport;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.xjs.activiti.domain.dto.ProcessDefinitionDTO;
import com.xjs.activiti.service.IProcessDefinitionService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RestController
@RequestMapping("/processDefinition")
@Api(tags = "工作流-流程定义")
public class ProcessDefinitionController extends BaseController {
@Autowired
private IProcessDefinitionService processDefinitionService;
/**
*
*
* @param processDefinition
* @return
*/
@GetMapping(value = "/list")
public TableDataInfo list(ProcessDefinitionDTO processDefinition) {
PageDomain pageDomain = TableSupport.buildPageRequest();
return getDataTable(processDefinitionService.selectProcessDefinitionList(processDefinition, pageDomain));
}
/**
* @return
*/
@GetMapping(value = "/getDefinitions/{instanceId}")
public AjaxResult getDefinitionsByInstanceId(@PathVariable("instanceId") String instanceId) {
return AjaxResult.success(processDefinitionService.getDefinitionsByInstanceId(instanceId));
}
/**
*
*
* @param deploymentId
* @return
*/
@Log(title = "流程定义管理", businessType = BusinessType.DELETE)
@DeleteMapping(value = "/remove/{deploymentId}")
public AjaxResult delDefinition(@PathVariable("deploymentId") String deploymentId) {
return toAjax(processDefinitionService.deleteProcessDefinitionById(deploymentId));
}
/**
*
*
* @param file
* @return
* @throws IOException
*/
@Log(title = "流程定义管理", businessType = BusinessType.IMPORT)
@PostMapping(value = "/uploadStreamAndDeployment")
public AjaxResult uploadStreamAndDeployment(@RequestParam("file") MultipartFile file) throws IOException {
processDefinitionService.uploadStreamAndDeployment(file);
return AjaxResult.success();
}
/**
*
*
* @param processDefinition
* @return
*/
@Log(title = "流程定义管理", businessType = BusinessType.UPDATE)
@PostMapping("/suspendOrActiveApply")
@ResponseBody
public AjaxResult suspendOrActiveApply(@RequestBody ProcessDefinitionDTO processDefinition) {
processDefinitionService.suspendOrActiveApply(processDefinition.getId(), processDefinition.getSuspendState());
return AjaxResult.success();
}
/**
*
*
* @param multipartFile
* @return
* @throws IOException
*/
@Log(title = "流程定义管理", businessType = BusinessType.IMPORT)
@PostMapping(value = "/upload")
public AjaxResult upload(@RequestParam("processFile") MultipartFile multipartFile) throws IOException {
if (!multipartFile.isEmpty()) {
String fileName = processDefinitionService.upload(multipartFile);
return AjaxResult.success("操作成功", fileName);
}
return AjaxResult.error("不允许上传空文件!");
}
/**
* stringBPMN
*
* @param stringBPMN
* @return
*/
@PostMapping(value = "/addDeploymentByString")
public AjaxResult addDeploymentByString(@RequestParam("stringBPMN") String stringBPMN) {
processDefinitionService.addDeploymentByString(stringBPMN);
return AjaxResult.success();
}
/**
* XML
*
* @param response
* @param deploymentId
* @param resourceName
*/
@GetMapping(value = "/getDefinitionXML")
public void getProcessDefineXML(HttpServletResponse response,
@RequestParam("deploymentId") String deploymentId,
@RequestParam("resourceName") String resourceName) throws IOException {
processDefinitionService.getProcessDefineXML(response, deploymentId, resourceName);
}
}

@ -0,0 +1,57 @@
package com.xjs.activiti.controller;
import com.github.pagehelper.Page;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageDomain;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.core.web.page.TableSupport;
import com.xjs.activiti.domain.dto.ActTaskDTO;
import com.xjs.activiti.domain.dto.ActWorkflowFormDataDTO;
import com.xjs.activiti.service.IActTaskService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.text.ParseException;
import java.util.List;
@RestController
@RequestMapping("/task")
@Api(tags = "工作流-任务流程")
public class TaskController extends BaseController {
@Autowired
private IActTaskService actTaskService;
//获取我的代办任务
@GetMapping(value = "/list")
public TableDataInfo getTasks() {
PageDomain pageDomain = TableSupport.buildPageRequest();
Page<ActTaskDTO> hashMaps = actTaskService.selectProcessDefinitionList(pageDomain);
return getDataTable(hashMaps);
}
//渲染表单
@GetMapping(value = "/formDataShow/{taskID}")
public AjaxResult formDataShow(@PathVariable("taskID") String taskID) {
return AjaxResult.success(actTaskService.formDataShow(taskID));
}
//保存表单
@PostMapping(value = "/formDataSave/{taskID}")
public AjaxResult formDataSave(@PathVariable("taskID") String taskID,
@RequestBody List<ActWorkflowFormDataDTO> formData) throws ParseException {
return toAjax(actTaskService.formDataSave(taskID, formData));
}
}

@ -0,0 +1,149 @@
package com.xjs.activiti.domain;
import com.ruoyi.common.core.web.domain.BaseEntity;
import com.xjs.activiti.domain.dto.ActWorkflowFormDataDTO;
import org.activiti.api.task.model.Task;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* act_workflow_formdata
*
* @author xiejs
* @since 2022-04-17 02:07:29
*/
public class ActWorkflowFormData extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
*
*/
private Long id;
/**
* Id
*/
private String businessKey;
/**
* Key
*/
private String formKey;
/**
* id
*/
private String controlId;
/**
*
*/
private String controlName;
/**
*
*/
private String controlValue;
/**
*
*/
private String taskNodeName;
private String createName;
public ActWorkflowFormData() {
}
public ActWorkflowFormData(String businessKey, ActWorkflowFormDataDTO actWorkflowFormDataDTO, Task task) {
this.businessKey = businessKey;
this.formKey = task.getFormKey();
this.controlId = actWorkflowFormDataDTO.getControlId();
this.controlName = actWorkflowFormDataDTO.getControlLable();
if ("radio".equals(actWorkflowFormDataDTO.getControlType())) {
int i = Integer.parseInt(actWorkflowFormDataDTO.getControlValue());
this.controlValue = actWorkflowFormDataDTO.getControlDefault().split("--__--")[i];
} else {
this.controlValue = actWorkflowFormDataDTO.getControlValue();
}
this.taskNodeName = task.getName();
}
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public String getBusinessKey() {
return businessKey;
}
public void setBusinessKey(String businessKey) {
this.businessKey = businessKey;
}
public void setFormKey(String formKey) {
this.formKey = formKey;
}
public String getFormKey() {
return formKey;
}
public void setControlId(String controlId) {
this.controlId = controlId;
}
public String getControlId() {
return controlId;
}
public String getControlName() {
return controlName;
}
public void setControlName(String controlName) {
this.controlName = controlName;
}
public void setControlValue(String controlValue) {
this.controlValue = controlValue;
}
public String getControlValue() {
return controlValue;
}
public void setTaskNodeName(String taskNodeName) {
this.taskNodeName = taskNodeName;
}
public String getTaskNodeName() {
return taskNodeName;
}
public String getCreateName() {
return createName;
}
public void setCreateName(String createName) {
this.createName = createName;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("procInstId", getBusinessKey())
.append("formKey", getFormKey())
.append("controlId", getControlId())
.append("controlValue", getControlValue())
.append("taskNodeName", getTaskNodeName())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.toString();
}
}

@ -0,0 +1,99 @@
package com.xjs.activiti.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.web.domain.BaseEntity;
import org.activiti.api.task.model.Task;
import org.activiti.engine.runtime.ProcessInstance;
import java.util.Date;
/**
* actdto
* @author xiejs
* @since 2022-04-17 02:08:24
*/
public class ActTaskDTO extends BaseEntity {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createdDate;
private String instanceName;
private String definitionKey;
private String businessKey;
public ActTaskDTO() {
}
public ActTaskDTO(Task task, ProcessInstance processInstance) {
this.id = task.getId();
this.name = task.getName();
this.status = task.getStatus().toString();
this.createdDate = task.getCreatedDate();
this.instanceName = processInstance.getName();
this.definitionKey = processInstance.getProcessDefinitionKey();
this.businessKey = processInstance.getBusinessKey();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public String getInstanceName() {
return instanceName;
}
public void setInstanceName(String instanceName) {
this.instanceName = instanceName;
}
public String getDefinitionKey() {
return definitionKey;
}
public void setDefinitionKey(String definitionKey) {
this.definitionKey = definitionKey;
}
public String getBusinessKey() {
return businessKey;
}
public void setBusinessKey(String businessKey) {
this.businessKey = businessKey;
}
}

@ -0,0 +1,85 @@
package com.xjs.activiti.domain.dto;
import com.ruoyi.common.core.web.domain.BaseEntity;
/**
* act_workflow_formdata
*
* @author xiejs
* @since 2022-04-17 02:08:45
*/
public class ActWorkflowFormDataDTO extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* id
*/
private String controlId;
private String controlType;
/**
*
*/
private String controlLable;
private String controlIsParam;
/**
*
*/
private String controlValue;
private String controlDefault;
public void setControlId(String controlId) {
this.controlId = controlId;
}
public String getControlId() {
return controlId;
}
public void setControlValue(String controlValue) {
this.controlValue = controlValue;
}
public String getControlValue() {
return controlValue;
}
public String getControlIsParam() {
return controlIsParam;
}
public void setControlIsParam(String controlIsParam) {
this.controlIsParam = controlIsParam;
}
public String getControlLable() {
return controlLable;
}
public void setControlLable(String controlLable) {
this.controlLable = controlLable;
}
public String getControlDefault() {
return controlDefault;
}
public void setControlDefault(String controlDefault) {
this.controlDefault = controlDefault;
}
public String getControlType() {
return controlType;
}
public void setControlType(String controlType) {
this.controlType = controlType;
}
}

@ -0,0 +1,48 @@
package com.xjs.activiti.domain.dto;
import java.util.Set;
/**
* act dto
*
* @author xiejs
* @since 2022-04-17 02:07:58
*/
public class ActivitiHighLineDTO {
private Set<String> highPoint;
private Set<String> highLine;
private Set<String> waitingToDo;
private Set<String> iDo;
public Set<String> getHighPoint() {
return highPoint;
}
public void setHighPoint(Set<String> highPoint) {
this.highPoint = highPoint;
}
public Set<String> getHighLine() {
return highLine;
}
public void setHighLine(Set<String> highLine) {
this.highLine = highLine;
}
public Set<String> getWaitingToDo() {
return waitingToDo;
}
public void setWaitingToDo(Set<String> waitingToDo) {
this.waitingToDo = waitingToDo;
}
public Set<String> getiDo() {
return iDo;
}
public void setiDo(Set<String> iDo) {
this.iDo = iDo;
}
}

@ -0,0 +1,37 @@
package com.xjs.activiti.domain.dto;
import org.activiti.engine.repository.ProcessDefinition;
/**
* actid dto
* @author xiejs
* @since 2022-04-17 02:09:10
*/
public class DefinitionIdDTO {
private String deploymentID;
private String resourceName;
public String getDeploymentID() {
return deploymentID;
}
public void setDeploymentID(String deploymentID) {
this.deploymentID = deploymentID;
}
public String getResourceName() {
return resourceName;
}
public void setResourceName(String resourceName) {
this.resourceName = resourceName;
}
public DefinitionIdDTO() {
}
public DefinitionIdDTO(ProcessDefinition processDefinition) {
this.deploymentID = processDefinition.getDeploymentId();
this.resourceName = processDefinition.getResourceName();
}
}

@ -0,0 +1,49 @@
package com.xjs.activiti.domain.dto;
import java.util.List;
/**
* actdto
*
* @author xiejs
* @since 2022-04-17 02:09:28
*/
public class HistoryDataDTO {
private String taskNodeName;
private String createName;
private String createdDate;
private List<HistoryFormDataDTO> formHistoryDataDTO;
public String getTaskNodeName() {
return taskNodeName;
}
public void setTaskNodeName(String taskNodeName) {
this.taskNodeName = taskNodeName;
}
public String getCreateName() {
return createName;
}
public void setCreateName(String createName) {
this.createName = createName;
}
public String getCreatedDate() {
return createdDate;
}
public void setCreatedDate(String createdDate) {
this.createdDate = createdDate;
}
public List<HistoryFormDataDTO> getFormHistoryDataDTO() {
return formHistoryDataDTO;
}
public void setFormHistoryDataDTO(List<HistoryFormDataDTO> formHistoryDataDTO) {
this.formHistoryDataDTO = formHistoryDataDTO;
}
}

@ -0,0 +1,36 @@
package com.xjs.activiti.domain.dto;
/**
* DTO
*
* @author xiejs
* @since 2022-04-17 02:09:41
*/
public class HistoryFormDataDTO {
private String title;
private String value;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public HistoryFormDataDTO() {
}
public HistoryFormDataDTO(String title, String value) {
this.title = title;
this.value = value;
}
}

@ -0,0 +1,118 @@
package com.xjs.activiti.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.web.domain.BaseEntity;
import com.xjs.activiti.domain.vo.ActReDeploymentVO;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
import java.util.Date;
/**
* actdto
*
* @author xiejs
* @since 2022-04-17 02:10:06
*/
public class ProcessDefinitionDTO extends BaseEntity {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String key;
private int version;
private String deploymentId;
private String resourceName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date deploymentTime;
/**
* 1 2
*/
private Integer suspendState;
public ProcessDefinitionDTO() {
}
public ProcessDefinitionDTO(ProcessDefinitionEntityImpl processDefinition, ActReDeploymentVO actReDeploymentVO) {
this.id = processDefinition.getId();
this.name = processDefinition.getName();
this.key = processDefinition.getKey();
this.version = processDefinition.getVersion();
this.deploymentId = processDefinition.getDeploymentId();
this.resourceName = processDefinition.getResourceName();
this.deploymentTime = actReDeploymentVO.getDeployTime();
this.suspendState = processDefinition.getSuspensionState();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getResourceName() {
return resourceName;
}
public void setResourceName(String resourceName) {
this.resourceName = resourceName;
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
public String getDeploymentId() {
return deploymentId;
}
public void setDeploymentId(String deploymentId) {
this.deploymentId = deploymentId;
}
public Date getDeploymentTime() {
return deploymentTime;
}
public void setDeploymentTime(Date deploymentTime) {
this.deploymentTime = deploymentTime;
}
public Integer getSuspendState() {
return suspendState;
}
public void setSuspendState(Integer suspendState) {
this.suspendState = suspendState;
}
}

@ -0,0 +1,30 @@
package com.xjs.activiti.domain.vo;
import java.util.Date;
/**
* Actvo
* @author xiejs
* @since 2022-04-17 02:07:39
*/
public class ActReDeploymentVO {
private String id;
private Date deployTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getDeployTime() {
return deployTime;
}
public void setDeployTime(Date deployTime) {
this.deployTime = deployTime;
}
}

@ -0,0 +1,24 @@
package com.xjs.activiti.mapper;
import com.xjs.activiti.domain.vo.ActReDeploymentVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
* actMapper
*
* @author xiejs
* @since 2022-04-17 01:47:24
*/
public interface ActReDeploymentMapper {
/**
* id s
* @param ids ids
* @return list
*/
List<ActReDeploymentVO> selectActReDeploymentByIds(@Param("ids") Set<String> ids);
}

@ -0,0 +1,83 @@
package com.xjs.activiti.mapper;
import com.xjs.activiti.domain.ActWorkflowFormData;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
* Mapper
*
* @author xiejs
* @date 2022-04-17 01:48:08
*/
public interface ActWorkflowFormDataMapper
{
/**
*
*
* @param id ID
* @return
*/
public ActWorkflowFormData selectActWorkflowFormDataById(Long id);
/**
*
*
* @param businessKey ID
* @return
*/
public List<ActWorkflowFormData> selectActWorkflowFormDataByBusinessKey(String businessKey);
/**
*
*
* @param ActWorkflowFormData
* @return
*/
public List<ActWorkflowFormData> selectActWorkflowFormDataList(ActWorkflowFormData ActWorkflowFormData);
/**
*
*
* @param ActWorkflowFormData
* @return
*/
public int insertActWorkflowFormData(ActWorkflowFormData ActWorkflowFormData);
/**
*
*
* @param
* @return
*/
public int insertActWorkflowFormDatas(@Param("createBy") String createBy, @Param("ActWorkflowFormData")List<ActWorkflowFormData> ActWorkflowFormData, Date date ,String createName);
/**
*
*
* @param ActWorkflowFormData
* @return
*/
public int updateActWorkflowFormData(ActWorkflowFormData ActWorkflowFormData);
/**
*
*
* @param id ID
* @return
*/
public int deleteActWorkflowFormDataById(Long id);
/**
*
*
* @param ids ID
* @return
*/
public int deleteActWorkflowFormDataByIds(Long[] ids);
}

@ -0,0 +1,43 @@
package com.xjs.activiti.service;
import com.github.pagehelper.Page;
import com.ruoyi.common.core.web.page.PageDomain;
import com.xjs.activiti.domain.dto.ActTaskDTO;
import com.xjs.activiti.domain.dto.ActWorkflowFormDataDTO;
import java.text.ParseException;
import java.util.List;
/**
* Activiti
*
* @author xiejs
* @since 2022-04-17 01:54:51
*/
public interface IActTaskService {
/**
*
* @param pageDomain
* @return
*/
Page<ActTaskDTO> selectProcessDefinitionList(PageDomain pageDomain);
/**
* id
*
* @param taskID id
* @return list
*/
List<String> formDataShow(String taskID);
/**
*
* @param taskID id
* @param awfs
* @return
* @throws ParseException
*/
int formDataSave(String taskID, List<ActWorkflowFormDataDTO> awfs) throws ParseException;
}

@ -0,0 +1,72 @@
package com.xjs.activiti.service;
import com.xjs.activiti.domain.ActWorkflowFormData;
import java.util.List;
/**
* Service
*
* @author xiejs
* @since 2022-04-17 01:49:39
*/
public interface IActWorkflowFormDataService {
/**
*
*
* @param id ID
* @return
*/
ActWorkflowFormData selectActWorkflowFormDataById(Long id);
List<ActWorkflowFormData> selectActWorkflowFormDataByBusinessKey(String businessKey);
/**
*
*
* @param ActWorkflowFormData
* @return
*/
List<ActWorkflowFormData> selectActWorkflowFormDataList(ActWorkflowFormData ActWorkflowFormData);
/**
*
*
* @param ActWorkflowFormData
* @return
*/
int insertActWorkflowFormData(ActWorkflowFormData ActWorkflowFormData);
/**
*
*
* @param ActWorkflowFormDatas
* @return
*/
int insertActWorkflowFormDatas(List<ActWorkflowFormData> ActWorkflowFormDatas);
/**
*
*
* @param ActWorkflowFormData
* @return
*/
int updateActWorkflowFormData(ActWorkflowFormData ActWorkflowFormData);
/**
*
*
* @param ids ID
* @return
*/
int deleteActWorkflowFormDataByIds(Long[] ids);
/**
*
*
* @param id ID
* @return
*/
int deleteActWorkflowFormDataById(Long id);
}

@ -0,0 +1,19 @@
package com.xjs.activiti.service;
import com.xjs.activiti.domain.dto.ActivitiHighLineDTO;
/**
* Activiti
*
* @author xiejs
* @since 2022-04-17 01:48:55
*/
public interface IActivitiHistoryService {
/**
*
* @param instanceId id
* @return ActivitiHighLineDTO
*/
ActivitiHighLineDTO gethighLine(String instanceId);
}

@ -0,0 +1,22 @@
package com.xjs.activiti.service;
import com.xjs.activiti.domain.dto.HistoryDataDTO;
import java.util.List;
/**
*
*
* @author xiejs
* @since 2022-04-17 01:50:13
*/
public interface IFormHistoryDataService {
/**
*
* @param instanceId id
* @return list
*/
List<HistoryDataDTO> historyDataShow(String instanceId);
}

@ -0,0 +1,85 @@
package com.xjs.activiti.service;
import com.github.pagehelper.Page;
import com.ruoyi.common.core.web.page.PageDomain;
import com.xjs.activiti.domain.dto.DefinitionIdDTO;
import com.xjs.activiti.domain.dto.ProcessDefinitionDTO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
*
*
* @author xiejs
* @since 2022-04-17 01:50:42
*/
public interface IProcessDefinitionService {
/**
*
*
* @param processDefinition
* @return Page
*/
Page<ProcessDefinitionDTO> selectProcessDefinitionList(ProcessDefinitionDTO processDefinition, PageDomain pageDomain);
/**
* ID
*
* @param instanceId id
* @return
*/
DefinitionIdDTO getDefinitionsByInstanceId(String instanceId);
/**
*
*
* @param id
* @return
*/
int deleteProcessDefinitionById(String id);
/**
*
*
* @param file
* @return
* @throws IOException
*/
void uploadStreamAndDeployment(MultipartFile file) throws IOException;
/**
*
*
* @param id id
* @param suspendState
* @return
*/
void suspendOrActiveApply(String id, Integer suspendState);
/**
*
*
* @param multipartFile
* @return
*/
String upload(MultipartFile multipartFile) throws IOException;
/**
* stringBPMN
*
* @param stringBPMN
* @return
*/
void addDeploymentByString(String stringBPMN);
/**
* XML
*
* @param response
* @param deploymentId
* @param resourceName
*/
void getProcessDefineXML(HttpServletResponse response, String deploymentId, String resourceName) throws IOException;
}

@ -0,0 +1,133 @@
package com.xjs.activiti.service.impl;
import com.github.pagehelper.Page;
import com.ruoyi.common.core.web.page.PageDomain;
import com.xjs.activiti.domain.ActWorkflowFormData;
import com.xjs.activiti.domain.dto.ActTaskDTO;
import com.xjs.activiti.domain.dto.ActWorkflowFormDataDTO;
import com.xjs.activiti.service.IActTaskService;
import com.xjs.activiti.service.IActWorkflowFormDataService;
import org.activiti.api.runtime.shared.query.Pageable;
import org.activiti.api.task.model.Task;
import org.activiti.api.task.model.builders.TaskPayloadBuilder;
import org.activiti.api.task.runtime.TaskRuntime;
import org.activiti.bpmn.model.FormProperty;
import org.activiti.bpmn.model.UserTask;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Activiti
*
* @author xiejs
* @since 2022-04-17 01:54:51
*/
@Service
public class ActTaskServiceImpl implements IActTaskService {
@Autowired
private RepositoryService repositoryService;
@Autowired
private TaskRuntime taskRuntime;
@Autowired
private RuntimeService runtimeService;
@Autowired
private IActWorkflowFormDataService actWorkflowFormDataService;
@Override
public Page<ActTaskDTO> selectProcessDefinitionList(PageDomain pageDomain) {
Page<ActTaskDTO> list = new Page<ActTaskDTO>();
org.activiti.api.runtime.shared.query.Page<Task> pageTasks = taskRuntime.tasks(Pageable.of((pageDomain.getPageNum() - 1) * pageDomain.getPageSize(), pageDomain.getPageSize()));
List<Task> tasks = pageTasks.getContent();
int totalItems = pageTasks.getTotalItems();
list.setTotal(totalItems);
if (totalItems != 0) {
Set<String> processInstanceIdIds = tasks.parallelStream().map(t -> t.getProcessInstanceId()).collect(Collectors.toSet());
List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIdIds).list();
List<ActTaskDTO> actTaskDTOS = tasks.stream()
.map(t -> new ActTaskDTO(t, processInstanceList.parallelStream().filter(pi -> t.getProcessInstanceId().equals(pi.getId())).findAny().get()))
.collect(Collectors.toList());
list.addAll(actTaskDTOS);
}
return list;
}
@Override
public List<String> formDataShow(String taskID) {
Task task = taskRuntime.task(taskID);
/* ------------------------------------------------------------------------------
FormProperty_0ueitp2--__!!--__!!--__!!--__!!
FormProperty_0lovri0--__!!string--__!!--__!!f--__!!!!__--
FormProperty_1iu6onu--__!!int--__!!--__!!s
FormProperty_ID
fst(intintstring)
*/
//注意!!!!!!!!:表单Key必须要任务编号一模一样因为参数需要任务key但是无法获取只能获取表单key“task.getFormKey()”当做任务key
UserTask userTask = (UserTask) repositoryService.getBpmnModel(task.getProcessDefinitionId())
.getFlowElement(task.getFormKey());
if (userTask == null) {
return null;
}
List<FormProperty> formProperties = userTask.getFormProperties();
List<String> collect = formProperties.stream().map(fp -> fp.getId()).collect(Collectors.toList());
return collect;
}
@Override
public int formDataSave(String taskID, List<ActWorkflowFormDataDTO> awfs) throws ParseException {
Task task = taskRuntime.task(taskID);
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
Boolean hasVariables = false;//没有任何参数
HashMap<String, Object> variables = new HashMap<String, Object>();
//前端传来的字符串,拆分成每个控件
List<ActWorkflowFormData> acwfds = new ArrayList<>();
for (ActWorkflowFormDataDTO awf : awfs) {
ActWorkflowFormData actWorkflowFormData = new ActWorkflowFormData(processInstance.getBusinessKey(), awf, task);
acwfds.add(actWorkflowFormData);
//构建参数集合
if (!"f".equals(awf.getControlIsParam())) {
variables.put(awf.getControlId(), awf.getControlValue());
hasVariables = true;
}
}//for结束
if (task.getAssignee() == null) {
taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build());
}
if (hasVariables) {
//带参数完成任务
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID)
.withVariables(variables)
.build());
} else {
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskID)
.build());
}
//写入数据库
return actWorkflowFormDataService.insertActWorkflowFormDatas(acwfds);
}
}

@ -0,0 +1,105 @@
package com.xjs.activiti.service.impl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.xjs.activiti.domain.ActWorkflowFormData;
import com.xjs.activiti.mapper.ActWorkflowFormDataMapper;
import com.xjs.activiti.service.IActWorkflowFormDataService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* Service
*
* @author xiejs
* @since 2022-04-17 01:51:27
*/
@Service
public class ActWorkflowFormDataServiceImpl implements IActWorkflowFormDataService {
@Resource
private ActWorkflowFormDataMapper actWorkflowFormDataMapper;
/**
*
*
* @param id ID
* @return
*/
@Override
public ActWorkflowFormData selectActWorkflowFormDataById(Long id) {
return actWorkflowFormDataMapper.selectActWorkflowFormDataById(id);
}
@Override
public List<ActWorkflowFormData> selectActWorkflowFormDataByBusinessKey(String businessKey) {
return actWorkflowFormDataMapper.selectActWorkflowFormDataByBusinessKey(businessKey);
}
/**
*
*
* @param ActWorkflowFormData
* @return
*/
@Override
public List<ActWorkflowFormData> selectActWorkflowFormDataList(ActWorkflowFormData ActWorkflowFormData) {
return actWorkflowFormDataMapper.selectActWorkflowFormDataList(ActWorkflowFormData);
}
/**
*
*
* @param ActWorkflowFormData
* @return
*/
@Override
public int insertActWorkflowFormData(ActWorkflowFormData ActWorkflowFormData) {
ActWorkflowFormData.setCreateTime(DateUtils.getNowDate());
return actWorkflowFormDataMapper.insertActWorkflowFormData(ActWorkflowFormData);
}
@Override
public int insertActWorkflowFormDatas(List<ActWorkflowFormData> ActWorkflowFormDatas) {
return actWorkflowFormDataMapper.insertActWorkflowFormDatas(SecurityUtils.getUsername(), ActWorkflowFormDatas, new Date(),
SecurityUtils.getLoginUser().getSysUser().getNickName());
}
/**
*
*
* @param ActWorkflowFormData
* @return
*/
@Override
public int updateActWorkflowFormData(ActWorkflowFormData ActWorkflowFormData) {
return actWorkflowFormDataMapper.updateActWorkflowFormData(ActWorkflowFormData);
}
/**
*
*
* @param ids ID
* @return
*/
@Override
public int deleteActWorkflowFormDataByIds(Long[] ids) {
return actWorkflowFormDataMapper.deleteActWorkflowFormDataByIds(ids);
}
/**
*
*
* @param id ID
* @return
*/
@Override
public int deleteActWorkflowFormDataById(Long id) {
return actWorkflowFormDataMapper.deleteActWorkflowFormDataById(id);
}
}

@ -0,0 +1,132 @@
package com.xjs.activiti.service.impl;
import com.xjs.activiti.domain.dto.ActivitiHighLineDTO;
import com.xjs.activiti.service.IActivitiHistoryService;
import org.activiti.bpmn.model.Process;
import org.activiti.bpmn.model.*;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* Activiti
*
* @author xiejs
* @since 2022-04-17 01:48:55
*/
@Service
public class ActivitiHistoryServiceImpl implements IActivitiHistoryService {
@Autowired
private HistoryService historyService;
@Autowired
private RepositoryService repositoryService;
@Override
public ActivitiHighLineDTO gethighLine(String instanceId) {
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(instanceId).singleResult();
//获取bpmnModel对象
BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId());
//因为我们这里只定义了一个Process 所以获取集合中的第一个即可
Process process = bpmnModel.getProcesses().get(0);
//获取所有的FlowElement信息
Collection<FlowElement> flowElements = process.getFlowElements();
Map<String, String> map = new HashMap<>();
for (FlowElement flowElement : flowElements) {
//判断是否是连线
if (flowElement instanceof SequenceFlow) {
SequenceFlow sequenceFlow = (SequenceFlow) flowElement;
String ref = sequenceFlow.getSourceRef();
String targetRef = sequenceFlow.getTargetRef();
map.put(ref + targetRef, sequenceFlow.getId());
}
}
//获取流程实例 历史节点(全部)
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(instanceId)
.list();
//各个历史节点 两两组合 key
Set<String> keyList = new HashSet<>();
for (HistoricActivityInstance i : list) {
for (HistoricActivityInstance j : list) {
if (i != j) {
keyList.add(i.getActivityId() + j.getActivityId());
}
}
}
//高亮连线ID
Set<String> highLine = new HashSet<>();
keyList.forEach(s -> highLine.add(map.get(s)));
//获取流程实例 历史节点(已完成)
List<HistoricActivityInstance> listFinished = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(instanceId)
.finished()
.list();
//高亮节点ID
Set<String> highPoint = new HashSet<>();
listFinished.forEach(s -> highPoint.add(s.getActivityId()));
//获取流程实例 历史节点(待办节点)
List<HistoricActivityInstance> listUnFinished = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(instanceId)
.unfinished()
.list();
//需要移除的高亮连线
Set<String> set = new HashSet<>();
//待办高亮节点
Set<String> waitingToDo = new HashSet<>();
listUnFinished.forEach(s -> {
waitingToDo.add(s.getActivityId());
for (FlowElement flowElement : flowElements) {
//判断是否是 用户节点
if (flowElement instanceof UserTask) {
UserTask userTask = (UserTask) flowElement;
if (userTask.getId().equals(s.getActivityId())) {
List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows();
//因为 高亮连线查询的是所有节点 两两组合 把待办 之后 往外发出的连线 也包含进去了 所以要把高亮待办节点 之后 即出的连线去掉
if (outgoingFlows != null && outgoingFlows.size() > 0) {
outgoingFlows.forEach(a -> {
if (a.getSourceRef().equals(s.getActivityId())) {
set.add(a.getId());
}
});
}
}
}
}
});
highLine.removeAll(set);
Set<String> iDo = new HashSet<>(); //存放 高亮 我的办理节点
//当前用户已完成的任务
List<HistoricTaskInstance> taskInstanceList = historyService.createHistoricTaskInstanceQuery()
// .taskAssignee(SecurityUtils.getUsername())
.finished()
.processInstanceId(instanceId).list();
taskInstanceList.forEach(a -> iDo.add(a.getTaskDefinitionKey()));
ActivitiHighLineDTO activitiHighLineDTO = new ActivitiHighLineDTO();
activitiHighLineDTO.setHighPoint(highPoint);
activitiHighLineDTO.setHighLine(highLine);
activitiHighLineDTO.setWaitingToDo(waitingToDo);
activitiHighLineDTO.setiDo(iDo);
return activitiHighLineDTO;
}
}

@ -0,0 +1,53 @@
package com.xjs.activiti.service.impl;
import com.xjs.activiti.domain.ActWorkflowFormData;
import com.xjs.activiti.domain.dto.HistoryDataDTO;
import com.xjs.activiti.domain.dto.HistoryFormDataDTO;
import com.xjs.activiti.service.IActWorkflowFormDataService;
import com.xjs.activiti.service.IFormHistoryDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
*
* @author xiejs
* @since 2022-04-17 01:50:13
*/
@Service
public class FormHistoryDataServiceImpl implements IFormHistoryDataService {
@Autowired
private IActWorkflowFormDataService actWorkflowFormDataService;
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public List<HistoryDataDTO> historyDataShow(String businessKey) {
List<HistoryDataDTO> returnHistoryFromDataDTOS = new ArrayList<>();
List<ActWorkflowFormData> actWorkflowFormData = actWorkflowFormDataService.selectActWorkflowFormDataByBusinessKey(businessKey);
Map<String, List<ActWorkflowFormData>> collect = actWorkflowFormData.stream().collect(Collectors.groupingBy(ActWorkflowFormData::getTaskNodeName));
collect.entrySet().forEach(
entry -> {
HistoryDataDTO returnHistoryFromDataDTO = new HistoryDataDTO();
returnHistoryFromDataDTO.setTaskNodeName(entry.getValue().get(0).getTaskNodeName());
returnHistoryFromDataDTO.setCreateName(entry.getValue().get(0).getCreateName());
returnHistoryFromDataDTO.setCreatedDate(sdf.format(entry.getValue().get(0).getCreateTime()));
returnHistoryFromDataDTO.setFormHistoryDataDTO(entry.getValue().stream().map(awfd -> new HistoryFormDataDTO(awfd.getControlName(), awfd.getControlValue())).collect(Collectors.toList()));
returnHistoryFromDataDTOS.add(returnHistoryFromDataDTO);
}
);
List<HistoryDataDTO> collect1 = returnHistoryFromDataDTOS.stream().sorted((x, y) -> x.getCreatedDate().compareTo(y.getCreatedDate())).collect(Collectors.toList());
return collect1;
}
}

@ -0,0 +1,147 @@
package com.xjs.activiti.service.impl;
import com.github.pagehelper.Page;
import com.ruoyi.common.core.web.page.PageDomain;
import com.xjs.activiti.domain.dto.DefinitionIdDTO;
import com.xjs.activiti.domain.dto.ProcessDefinitionDTO;
import com.xjs.activiti.domain.vo.ActReDeploymentVO;
import com.xjs.activiti.mapper.ActReDeploymentMapper;
import com.xjs.activiti.service.IProcessDefinitionService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.zip.ZipInputStream;
/**
*
* @author xiejs
* @since 2022-04-17 01:50:42
*/
@Service
public class ProcessDefinitionServiceImpl implements IProcessDefinitionService {
@Autowired
private RepositoryService repositoryService;
@Resource
private ActReDeploymentMapper actReDeploymentMapper;
@Autowired
private HistoryService historyService;
@Autowired
private RuntimeService runtimeService;
@Override
public Page<ProcessDefinitionDTO> selectProcessDefinitionList(ProcessDefinitionDTO processDefinition, PageDomain pageDomain) {
Page<ProcessDefinitionDTO> list = new Page<>();
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().orderByProcessDefinitionId().orderByProcessDefinitionVersion().desc();
if (StringUtils.isNotBlank(processDefinition.getName())) {
processDefinitionQuery.processDefinitionNameLike("%" + processDefinition.getName() + "%");
}
if (StringUtils.isNotBlank(processDefinition.getKey())) {
processDefinitionQuery.processDefinitionKeyLike("%" + processDefinition.getKey() + "%");
}
List<ProcessDefinition> processDefinitions = processDefinitionQuery.listPage((pageDomain.getPageNum() - 1) * pageDomain.getPageSize(), pageDomain.getPageSize());
long count = processDefinitionQuery.count();
list.setTotal(count);
if (count!=0) {
Set<String> ids = processDefinitions.parallelStream().map(pdl -> pdl.getDeploymentId()).collect(Collectors.toSet());
List<ActReDeploymentVO> actReDeploymentVOS = actReDeploymentMapper.selectActReDeploymentByIds(ids);
List<ProcessDefinitionDTO> processDefinitionDTOS = processDefinitions.stream()
.map(pd -> new ProcessDefinitionDTO((ProcessDefinitionEntityImpl) pd, actReDeploymentVOS.parallelStream().filter(ard -> pd.getDeploymentId().equals(ard.getId())).findAny().orElse(new ActReDeploymentVO())))
.collect(Collectors.toList());
list.addAll(processDefinitionDTOS);
}
return list;
}
@Override
public DefinitionIdDTO getDefinitionsByInstanceId(String instanceId) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult();
String deploymentId = processInstance.getDeploymentId();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult();
return new DefinitionIdDTO(processDefinition);
}
@Override
public int deleteProcessDefinitionById(String id) {
repositoryService.deleteDeployment(id, false);
return 1;
}
@Override
public void uploadStreamAndDeployment(MultipartFile file) throws IOException {
// 获取上传的文件名
String fileName = file.getOriginalFilename();
// 得到输入流(字节流)对象
InputStream fileInputStream = file.getInputStream();
// 文件的扩展名
String extension = FilenameUtils.getExtension(fileName);
if (extension.equals("zip")) {
ZipInputStream zip = new ZipInputStream(fileInputStream);
repositoryService.createDeployment()//初始化流程
.addZipInputStream(zip)
.deploy();
} else {
repositoryService.createDeployment()//初始化流程
.addInputStream(fileName, fileInputStream)
.deploy();
}
}
@Override
public void suspendOrActiveApply(String id, Integer suspendState) {
if (1==suspendState) {
// 当流程定义被挂起时,已经发起的该流程定义的流程实例不受影响(如果选择级联挂起则流程实例也会被挂起)。
// 当流程定义被挂起时,无法发起新的该流程定义的流程实例。
// 直观变化act_re_procdef 的 SUSPENSION_STATE_ 为 2
repositoryService.suspendProcessDefinitionById(id);
} else if (2==suspendState) {
repositoryService.activateProcessDefinitionById(id);
}
}
@Override
public String upload(MultipartFile multipartFile) throws IOException {
//return FileUploadUtils.upload(RuoYiConfig.getUploadPath()+"/processDefinition" , multipartFile);
return "";
}
@Override
public void addDeploymentByString(String stringBPMN) {
repositoryService.createDeployment()
.addString("CreateWithBPMNJS.bpmn", stringBPMN)
.deploy();
}
@Override
public void getProcessDefineXML(HttpServletResponse response, String deploymentId, String resourceName) throws IOException {
InputStream inputStream = repositoryService.getResourceAsStream(deploymentId, resourceName);
int count = inputStream.available();
byte[] bytes = new byte[count];
response.setContentType("text/xml");
OutputStream outputStream = response.getOutputStream();
while (inputStream.read(bytes) != -1) {
outputStream.write(bytes);
}
inputStream.close();
}
}

@ -0,0 +1,28 @@
<?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.xjs.activiti.mapper.ActReDeploymentMapper">
<resultMap type="com.xjs.activiti.domain.vo.ActReDeploymentVO" id="ActReDeploymentResult">
<id property="id" column="id"/>
<result property="deployTime" column="deploy_time"/>
</resultMap>
<sql id="selectDeploymentVo">
select ID_ id, DEPLOY_TIME_ deploy_time
from `act_re_deployment`
</sql>
<select id="selectActReDeploymentByIds" parameterType="String" resultMap="ActReDeploymentResult">
<include refid="selectDeploymentVo"/>
where ID_ in
<foreach collection="ids" item="id" index="index" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>

@ -0,0 +1,118 @@
<?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.xjs.activiti.mapper.ActWorkflowFormDataMapper">
<resultMap type="com.xjs.activiti.domain.ActWorkflowFormData" id="ActWorkflowFormDataResult">
<result property="id" column="id"/>
<result property="businessKey" column="business_key"/>
<result property="formKey" column="form_key"/>
<result property="controlId" column="control_id"/>
<result property="controlName" column="control_name"/>
<result property="controlValue" column="control_value"/>
<result property="taskNodeName" column="task_node_name"/>
<result property="createName" column="create_name"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
</resultMap>
<sql id="selectActWorkflowFormDataVo">
select id,
business_key,
form_key,
control_id,
control_name,
control_value,
task_node_name,
create_name,
create_by,
create_time
from act_workflow_FormData
</sql>
<select id="selectActWorkflowFormDataList" parameterType="com.xjs.activiti.domain.ActWorkflowFormData"
resultMap="ActWorkflowFormDataResult">
<include refid="selectActWorkflowFormDataVo"/>
<where>
<if test="businessKey != null and businessKey != ''">and business_key = #{businessKey}</if>
<if test="formKey != null and formKey != ''">and form_key = #{formKey}</if>
<if test="controlId != null and controlId != ''">and control_id = #{controlId}</if>
<if test="controlValue != null and controlValue != ''">and control_value = #{controlValue}</if>
<if test="taskNodeName != null and taskNodeName != ''">and task_node_name = #{taskNodeName}</if>
</where>
</select>
<select id="selectActWorkflowFormDataById" parameterType="Long" resultMap="ActWorkflowFormDataResult">
<include refid="selectActWorkflowFormDataVo"/>
where id = #{id}
</select>
<select id="selectActWorkflowFormDataByBusinessKey" parameterType="string" resultMap="ActWorkflowFormDataResult">
<include refid="selectActWorkflowFormDataVo"/>
where business_key = #{businessKey}
</select>
<insert id="insertActWorkflowFormData" parameterType="com.xjs.activiti.domain.ActWorkflowFormData"
useGeneratedKeys="true" keyProperty="id">
insert into act_workflow_FormData
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="businessKey != null">business_key,</if>
<if test="formKey != null">form_key,</if>
<if test="controlId != null">control_id,</if>
<if test="controlName != null">control_name,</if>
<if test="controlValue != null">control_value,</if>
<if test="taskNodeName != null">task_node_name,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="businessKey != null">#{businessKey},</if>
<if test="formKey != null">#{formKey},</if>
<if test="controlId != null">#{controlId},</if>
<if test="controlName != null">#{controlName},</if>
<if test="controlValue != null">#{controlValue},</if>
<if test="taskNodeName != null">#{taskNodeName},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
</trim>
</insert>
<insert id="insertActWorkflowFormDatas" useGeneratedKeys="true">
insert into act_workflow_FormData
(business_key,form_key,control_id,control_name,control_value,task_node_name,create_by,create_time,create_name)
values
<foreach collection="param2" item="awfd" index="index" separator=",">
(#{awfd.businessKey},#{awfd.formKey},#{awfd.controlId},#{awfd.controlName},
#{awfd.controlValue},#{awfd.taskNodeName},#{param1},#{param3},#{param4})
</foreach>
</insert>
<update id="updateActWorkflowFormData" parameterType="com.xjs.activiti.domain.ActWorkflowFormData">
update act_workflow_FormData
<trim prefix="SET" suffixOverrides=",">
<if test="businessKey != null">business_key = #{businessKey},</if>
<if test="formKey != null">form_key = #{formKey},</if>
<if test="controlId != null">control_id = #{controlId},</if>
<if test="controlName != null">control_name = #{controlName},</if>
<if test="controlValue != null">control_value = #{controlValue},</if>
<if test="taskNodeName != null">task_node_name = #{taskNodeName},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteActWorkflowFormDataById" parameterType="Long">
delete
from act_workflow_FormData
where id = #{id}
</delete>
<delete id="deleteActWorkflowFormDataByIds" parameterType="String">
delete from act_workflow_FormData where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true" /> <!-- 全局映射器启用缓存 -->
<setting name="useGeneratedKeys" value="true" /> <!-- 允许 JDBC 支持自动生成主键 -->
<setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 -->
<setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> 驼峰式命名 -->
</settings>
</configuration>
Loading…
Cancel
Save