update - 综合性调整目录结构,以及命令. 并添加 Swagger 响应的注解标识,方便后期直接生成 YAPI 文档

This commit is contained in:
wangli 2023-07-30 01:23:54 +08:00
parent b5ab1dab89
commit a244d87d78
104 changed files with 1287 additions and 1905 deletions

View File

@ -27,4 +27,10 @@ public interface BpmConstants {
String MODEL_META_INFO_PROCESS = "MODEL_PROCESS";
String MODEL_META_INFO_FORM = "MODEL_FORM";
String BPM_ALLOW_SKIP_USER_TASK = "_INTERNAL_SKIP_USER_TASK";
/**
* 用于国内审批节点填写审批建议
* <p>
* 其他类型 @see org.flowable.engine.impl.persistence.entity.CommentEntity
*/
String COMMENT_TYPE_ADVICE = "advice";
}

View File

@ -3,8 +3,8 @@ package cn.axzo.workflow.core.common.utils;
import cn.axzo.workflow.core.common.enums.BpmFlowMultiMode;
import cn.axzo.workflow.core.common.enums.BpmFlowNodeType;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.service.dto.BpmJsonNode;
import cn.axzo.workflow.core.service.dto.request.BpmJsonNodeProperty;
import cn.axzo.workflow.core.service.dto.request.bpmn.BpmnJsonNode;
import cn.axzo.workflow.core.service.dto.request.bpmn.BpmnJsonNodeProperty;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@ -31,7 +31,7 @@ import static org.flowable.engine.delegate.BaseExecutionListener.EVENTNAME_START
@Slf4j
public class BpmTransformUtil {
public static byte[] transformBpmnJsonToXml(BpmJsonNode bpmnJson, Model model) {
public static byte[] transformBpmnJsonToXml(BpmnJsonNode bpmnJson, Model model) {
// JSONObject bpmnJson = (JSONObject) updateReqVO.getBpmnJson();
@ -48,7 +48,7 @@ public class BpmTransformUtil {
}
List<SequenceFlow> sequenceFlows = Lists.newArrayList();
Map<String, BpmJsonNode> childNodeMap = new HashMap<>();
Map<String, BpmnJsonNode> childNodeMap = new HashMap<>();
String lastNode = null;
try {
@ -82,15 +82,15 @@ public class BpmTransformUtil {
}
public static SequenceFlow sequenceFlow(String from, String to, List<SequenceFlow> sequenceFlows, Map<String,
BpmJsonNode> childNodeMap, Process process) {
BpmnJsonNode> childNodeMap, Process process) {
SequenceFlow flow = new SequenceFlow();
String sequenceFlowId = id("sequenceFlow");
if (process.getFlowElement(from) != null && process.getFlowElement(from) instanceof ExclusiveGateway) {
BpmJsonNode childNode = childNodeMap.get(to);
BpmnJsonNode childNode = childNodeMap.get(to);
if (childNode != null) {
String parentId = childNode.getParentId();
if (StringUtils.isNotBlank(parentId)) {
BpmJsonNode parentNode = childNodeMap.get(parentId);
BpmnJsonNode parentNode = childNodeMap.get(parentId);
if (parentNode != null) {
if (BpmFlowNodeType.NODE_CONDITION.getType().equals(parentNode.getType())) {
sequenceFlowId = parentNode.getId();
@ -133,8 +133,8 @@ public class BpmTransformUtil {
}
public static String create(String fromId, BpmJsonNode flowNode, Process process, BpmnModel bpmnModel,
List<SequenceFlow> sequenceFlows, Map<String, BpmJsonNode> childNodeMap) throws InvocationTargetException, IllegalAccessException {
public static String create(String fromId, BpmnJsonNode flowNode, Process process, BpmnModel bpmnModel,
List<SequenceFlow> sequenceFlows, Map<String, BpmnJsonNode> childNodeMap) throws InvocationTargetException, IllegalAccessException {
String nodeType = flowNode.getType();
if (BpmFlowNodeType.NODE_ROUTER.isEqual(nodeType)) {
return createExclusiveGatewayBuilder(fromId, flowNode, process, bpmnModel, sequenceFlows, childNodeMap);
@ -144,7 +144,7 @@ public class BpmTransformUtil {
incoming.put("incoming", Collections.singletonList(fromId));
String id = createTask(process, flowNode, sequenceFlows, childNodeMap);
// 如果当前任务还有后续任务则遍历创建后续任务
BpmJsonNode children = flowNode.getChildren();
BpmnJsonNode children = flowNode.getChildren();
if (Objects.nonNull(children) && StringUtils.isNotBlank(children.getId())) {
return create(id, children, process, bpmnModel, sequenceFlows, childNodeMap);
} else {
@ -156,7 +156,7 @@ public class BpmTransformUtil {
incoming.put("incoming", Collections.singletonList(fromId));
String id = createTask(process, flowNode, sequenceFlows, childNodeMap);
// 如果当前任务还有后续任务则遍历创建后续任务
BpmJsonNode children = flowNode.getChildren();
BpmnJsonNode children = flowNode.getChildren();
if (Objects.nonNull(children) && StringUtils.isNotBlank(children.getId())) {
return create(id, children, process, bpmnModel, sequenceFlows, childNodeMap);
} else {
@ -174,9 +174,9 @@ public class BpmTransformUtil {
}
private static String createExclusiveGatewayBuilder(String formId, BpmJsonNode flowNode, Process process,
private static String createExclusiveGatewayBuilder(String formId, BpmnJsonNode flowNode, Process process,
BpmnModel bpmnModel, List<SequenceFlow> sequenceFlows,
Map<String, BpmJsonNode> childNodeMap) throws InvocationTargetException, IllegalAccessException {
Map<String, BpmnJsonNode> childNodeMap) throws InvocationTargetException, IllegalAccessException {
childNodeMap.put(flowNode.getId(), flowNode);
String name = flowNode.getName();
String exclusiveGatewayId = flowNode.getId();
@ -189,10 +189,10 @@ public class BpmTransformUtil {
if (Objects.isNull(flowNode.getBranches()) && Objects.isNull(flowNode.getChildren())) {
return exclusiveGatewayId;
}
List<BpmJsonNode> branches = flowNode.getBranches();
List<BpmnJsonNode> branches = flowNode.getBranches();
List<String> incoming = Lists.newArrayListWithCapacity(branches.size());
List<Map> conditions = Lists.newCopyOnWriteArrayList();
for (BpmJsonNode element : branches) {
for (BpmnJsonNode element : branches) {
if (!ObjectUtils.isEmpty(element.getProperty())) {
Boolean typeElse = element.getProperty().getDefaultCondition();
if (Boolean.TRUE.equals(typeElse)) {
@ -201,7 +201,7 @@ public class BpmTransformUtil {
}
childNodeMap.put(element.getId(), element);
BpmJsonNode children = element.getChildren();
BpmnJsonNode children = element.getChildren();
String nodeName = element.getName();
if (!ObjectUtils.isEmpty(element.getProperty()) && (Objects.isNull(children) || StringUtils.isBlank(children.getId()))) {
@ -246,11 +246,11 @@ public class BpmTransformUtil {
}
BpmJsonNode childNode = flowNode.getChildren();
BpmnJsonNode childNode = flowNode.getChildren();
if (Objects.nonNull(childNode) && StringUtils.isNotBlank(childNode.getId())) {
String parentId = childNode.getParentId();
BpmJsonNode parentChildNode = childNodeMap.get(parentId);
BpmnJsonNode parentChildNode = childNodeMap.get(parentId);
if (BpmFlowNodeType.NODE_ROUTER.getType().equals(parentChildNode.getType())) {
String endExId = parentChildNode.getId() + "end";
process.addFlowElement(createExclusiveGateWayEnd(endExId));
@ -263,7 +263,7 @@ public class BpmTransformUtil {
incomingObj.put("incoming", incoming);
FlowElement flowElement = bpmnModel.getFlowElement(incoming.get(0));
// 1.0 先进行边连接, 暂存 nextNode
BpmJsonNode nextNode = childNode.getChildren();
BpmnJsonNode nextNode = childNode.getChildren();
childNode.setChildren(null);
String identifier = endExId;
for (int i = 0; i < incoming.size(); i++) {
@ -315,8 +315,8 @@ public class BpmTransformUtil {
}
private static String createTask(Process process, BpmJsonNode flowNode, List<SequenceFlow> sequenceFlows,
Map<String, BpmJsonNode> childNodeMap) {
private static String createTask(Process process, BpmnJsonNode flowNode, List<SequenceFlow> sequenceFlows,
Map<String, BpmnJsonNode> childNodeMap) {
Map incomingJson = flowNode.getIncoming();
List<String> incoming = (List<String>) incomingJson.get("incoming");
// 自动生成id
@ -346,7 +346,7 @@ public class BpmTransformUtil {
if (!ObjectUtils.isEmpty(flowNode.getProperty()) && Boolean.TRUE.equals(flowNode.getProperty().getIsMultiTask())) {
BpmJsonNodeProperty property = flowNode.getProperty();
BpmnJsonNodeProperty property = flowNode.getProperty();
BpmFlowMultiMode mode = property.getMultiMode();
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics =

View File

@ -1,107 +0,0 @@
//package cn.axzo.workflow.core.repository.entity;
//
//import com.baomidou.mybatisplus.annotation.TableField;
//import com.baomidou.mybatisplus.annotation.TableId;
//import com.baomidou.mybatisplus.annotation.TableName;
//import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
//import lombok.Data;
//import lombok.ToString;
//
//import java.util.Date;
//import java.util.Map;
//
//@TableName(value = "bpm_process_instance_ext", autoResultMap = true)
//@Data
//@ToString(callSuper = true)
//public class BpmProcessInstanceExtDO {
//
// /**
// * 编号自增
// */
// @TableId
// private Long id;
// /**
// * 流程实例的名字
// * <p>
// * 冗余 ProcessInstance name 属性用于筛选
// */
// private String name;
//
// /**
// * 自定义的流程实例的编号
// */
// private String customProInstId;
// /**
// * 流程实例的编号
// * <p>
// * 关联 ProcessInstance id 属性
// */
// private String processInstanceId;
// /**
// * 流程定义的编号
// * <p>
// * 关联 ProcessDefinition id 属性
// */
// private String processDefinitionId;
// /**
// * 流程分类
// * <p>
// * 冗余 ProcessDefinition category 属性 数据字典 bpm_model_category
// */
// private String category;
// /**
// * 流程实例的状态
// * <p>
// * 枚举 {@link cn.axzo.workflow.core.common.enums.BpmProcessInstanceStatusEnum}
// */
// private Integer status;
// /**
// * 流程实例的结果
// * <p>
// * 枚举 {@link cn.axzo.workflow.core.common.enums.BpmProcessInstanceResultEnum}
// */
// private Integer result;
//
// /**
// * 创建时间
// */
// private Date createAt;
//
// /**
// * 结束时间
// * <p>
// * 冗余 HistoricProcessInstance endTime 属性
// */
// private Date endTime;
//
// /**
// * 提交的表单值
// */
// @TableField(typeHandler = JacksonTypeHandler.class)
// private Map<String, Object> formVariables;
//
// /**
// * 发起人所在的工作台ID(企业/项目)
// * <p>
// * 使用租户字段隔离
// */
// private String tenantId;
//
// /**
// * 发起人的身份ID
// */
// private String startUserId;
//
// /**
// * 发起人的姓名
// */
// private String startUserName;
//
// /**
// * 拓展字段业务自定义数据
// */
// @TableField(typeHandler = JacksonTypeHandler.class)
// private Object ext;
//
//
//}

View File

@ -1,98 +0,0 @@
//package cn.axzo.workflow.core.repository.entity;
//
//import cn.axzo.framework.data.mybatisplus.model.BaseOwnEntity;
//import com.baomidou.mybatisplus.annotation.TableField;
//import com.baomidou.mybatisplus.annotation.TableId;
//import com.baomidou.mybatisplus.annotation.TableName;
//import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
//import lombok.*;
//import org.flowable.engine.repository.ProcessDefinition;
//
//import java.util.List;
//import java.util.Map;
//
///**
// * Bpm 流程定义的拓展表
// * 主要解决 Activiti {@link ProcessDefinition} 不支持拓展字段所以新建拓展表
// *
// * @author 芋道源码
// */
//@TableName(value = "bpm_process_definition_ext", autoResultMap = true)
//@Data
//@EqualsAndHashCode(callSuper = true)
//@ToString(callSuper = true)
//@Builder
//@NoArgsConstructor
//@AllArgsConstructor
//// TODO 该表是否有用有待确定
//public class ProcessDefinitionExtDO extends BaseOwnEntity<ProcessDefinitionExtDO> {
//
// /**
// * 编号
// */
// @TableId
// private Long id;
// /**
// * 流程定义的编号
// *
// * 关联 ProcessDefinition id 属性
// */
// private String processDefinitionId;
// /**
// * 流程模型的编号
// *
// * 关联 Model id 属性
// */
// private String modelId;
// /**
// * 描述
// */
// private String description;
//
// /**
// * 表单类型
// *
// * 关联 {@link BpmModelFormTypeEnum}
// */
// private Integer formType;
// /**
// * 动态表单编号
// * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL}
// *
// * 关联 {@link BpmFormDO#getId()}
// */
// private Long formId;
// /**
// * 表单的配置
// * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL}
// *
// * 冗余 {@link BpmFormDO#getConf()}
// */
// private String formConf;
// /**
// * 表单项的数组
// * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL}
// *
// * 冗余 {@link BpmFormDO#getFields()} ()}
// */
// @TableField(typeHandler = JacksonTypeHandler.class)
// private List<String> formFields;
// /**
// * 自定义表单的提交路径使用 Vue 的路由地址
// * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM}
// */
// private String formCustomCreatePath;
// /**
// * 自定义表单的查看路径使用 Vue 的路由地址
// * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM}
// */
// private String formCustomViewPath;
//
// private String tenantId;
//
// /**
// * 拓展字段业务自定义数据
// * */
// @TableField(typeHandler = JacksonTypeHandler.class)
// private Map<String, Object> ext;
//}

View File

@ -1,106 +0,0 @@
//package cn.axzo.workflow.core.repository.entity;
//
//import cn.axzo.framework.data.mybatisplus.model.BaseOwnEntity;
//import com.baomidou.mybatisplus.annotation.TableField;
//import com.baomidou.mybatisplus.annotation.TableId;
//import com.baomidou.mybatisplus.annotation.TableName;
//import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
//import lombok.Data;
//import lombok.EqualsAndHashCode;
//import lombok.ToString;
//
//import java.util.Date;
//import java.util.Map;
//
//@EqualsAndHashCode(callSuper = true)
//@TableName(value = "bpm_task_ext", autoResultMap = true)
//@Data
//@ToString(callSuper = true)
//public class TaskExtDO extends BaseOwnEntity<TaskExtDO> {
//
// /**
// * 编号自增
// */
// @TableId
// private Long id;
// /**
// * 任务的审批人
// * <p>
// * 冗余 Task assignee 属性
// */
// private Long assigneeUserId;
// /**
// * 任务的名字
// * <p>
// * 冗余 Task name 属性为了筛选
// */
// private String name;
// /**
// * 任务的编号
// * <p>
// * 关联 Task id 属性
// */
// private String taskId;
// /**
// * 任务的结果
// * <p>
// * 枚举 {@link cn.axzo.workflow.core.common.enums.BpmProcessInstanceResultEnum}
// */
// private Integer result;
// /**
// * 审批建议
// */
// private String comment;
// /**
// * 任务的结束时间
// * <p>
// * 冗余 HistoricTaskInstance endTime 属性
// */
// private Date endTime;
//
// /**
// * 流程实例的编号
// * <p>
// * 关联 ProcessInstance id 属性
// */
// private String processInstanceId;
// /**
// * 流程定义的编号
// * <p>
// * 关联 ProcessDefinition id 属性
// */
// private String processDefinitionId;
//
// /**
// * 租户ID
// * <p>
// * 企业或项目工作台ID
// */
// private String tenantId;
//
// /**
// * 审批人的安心筑用户身份id
// */
// private String userId;
//
// /**
// * 参与单位下的具体公司ID
// */
// private Long companyId;
//
// /**
// * 审批人的姓名
// */
// private String userName;
//
// /**
// * 审批人的组织架构信息, 施工使用
// */
// private String organizationalStructureInfo;
//
// /**
// * 拓展字段业务自定义数据
// */
// @TableField(typeHandler = JacksonTypeHandler.class)
// private Map<String, Object> ext;
//}

View File

@ -1,18 +0,0 @@
//package cn.axzo.workflow.core.repository.mapper;
//
//import cn.axzo.workflow.core.repository.entity.ProcessDefinitionExtDO;
//import org.apache.ibatis.annotations.Mapper;
//
//import java.util.Collection;
//import java.util.List;
//
//@Mapper
//public interface BpmProcessDefinitionExtMapper extends BaseMapperX<ProcessDefinitionExtDO> {
// default List<ProcessDefinitionExtDO> selectListByProcessDefinitionIds(Collection<String> processDefinitionIds) {
// return selectList("process_definition_id", processDefinitionIds);
// }
//
// default ProcessDefinitionExtDO selectByProcessDefinitionId(String processDefinitionId) {
// return selectOne("process_definition_id", processDefinitionId);
// }
//}

View File

@ -1,46 +0,0 @@
//package cn.axzo.workflow.core.repository.mapper;
//
//import cn.axzo.workflow.core.repository.entity.BpmProcessInstanceExtDO;
//import cn.axzo.workflow.core.service.dto.request.process.BpmProcessInstanceMyPageReqVO;
//import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import org.apache.ibatis.annotations.Mapper;
//import org.springframework.util.StringUtils;
//
//@Mapper
//public interface BpmProcessInstanceExtMapper extends BaseMapperX<BpmProcessInstanceExtDO> {
//
// default BpmPageResult<BpmProcessInstanceExtDO> selectPage(BpmProcessInstanceMyPageReqVO reqVO) {
//
// return selectPage(reqVO, new BpmLambdaQueryWrapperX<BpmProcessInstanceExtDO>()
// .likeIfPresent(BpmProcessInstanceExtDO::getName, reqVO.getName())
// .eqIfPresent(BpmProcessInstanceExtDO::getCustomProInstId, reqVO.getCustomProInstId())
// .eqIfPresent(BpmProcessInstanceExtDO::getProcessInstanceId, reqVO.getProcessDefinitionId())
// .eqIfPresent(BpmProcessInstanceExtDO::getCategory, reqVO.getCategory())
// .eqIfPresent(BpmProcessInstanceExtDO::getStatus, reqVO.getStatus())
// .eqIfPresent(BpmProcessInstanceExtDO::getResult, reqVO.getResult())
// .eqIfPresent(BpmProcessInstanceExtDO::getTenantId, reqVO.getTenantId())
// .eqIfPresent(BpmProcessInstanceExtDO::getStartUserId, reqVO.getUserId())
// .eqIfPresent(BpmProcessInstanceExtDO::getResult, reqVO.getResult())
// .betweenIfPresent(BpmProcessInstanceExtDO::getCreateAt, reqVO.getBeginCreateTime(),
// reqVO.getEndCreateTime())
// .orderByAsc(BpmProcessInstanceExtDO::getStatus)
// .orderByDesc(BpmProcessInstanceExtDO::getCreateAt));
// }
//
// default BpmProcessInstanceExtDO selectByProcessInstanceId(String processInstanceId,
// String tenantId) {
// if (StringUtils.hasLength(tenantId)) {
// return selectOne(BpmProcessInstanceExtDO::getProcessInstanceId, processInstanceId,
// BpmProcessInstanceExtDO::getTenantId, tenantId);
// } else {
// return selectOne(BpmProcessInstanceExtDO::getProcessInstanceId, processInstanceId);
// }
// }
//
// default void updateByProcessInstanceId(BpmProcessInstanceExtDO updateObj) {
// update(updateObj, new QueryWrapper<BpmProcessInstanceExtDO>()
// .eq("process_instance_id", updateObj.getProcessInstanceId()));
// }
//
//}

View File

@ -1,28 +0,0 @@
//package cn.axzo.workflow.core.repository.mapper;
//
//import cn.axzo.workflow.core.repository.entity.TaskExtDO;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import org.apache.ibatis.annotations.Mapper;
//
//import java.util.Collection;
//import java.util.List;
//
//@Mapper
//public interface BpmTaskExtMapper extends BaseMapperX<TaskExtDO> {
// default void updateByTaskId(TaskExtDO entity) {
// update(entity,
// new LambdaQueryWrapper<TaskExtDO>().eq(TaskExtDO::getTaskId, entity.getTaskId()));
// }
//
// default List<TaskExtDO> selectListByTaskIds(Collection<String> taskIds) {
// return selectList(TaskExtDO::getTaskId, taskIds);
// }
//
// default List<TaskExtDO> selectListByProcessInstanceId(String processInstanceId) {
// return selectList("process_instance_id", processInstanceId);
// }
//
// default TaskExtDO selectByTaskId(String taskId) {
// return selectOne(TaskExtDO::getTaskId, taskId);
// }
//}

View File

@ -1,55 +0,0 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.model.BpmCategoryCreateDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmCategoryDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmCategoryUpdateDTO;
import cn.axzo.workflow.core.service.dto.response.model.BpmCategoryItemVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* Category的增删改查
*/
public interface BpmCategoryService {
/**
* 创建
*
* @param createDTO {@link #createBpmCategory(BpmCategoryCreateDTO)}
* @return insert record count
*/
int createBpmCategory(BpmCategoryCreateDTO createDTO);
/**
* 修改
*
* @param updateDTO {@link #updateBpmCategory(BpmCategoryUpdateDTO)}
* @return update record count
*/
int updateBpmCategory(BpmCategoryUpdateDTO updateDTO);
/**
* 删除
*
* @param id {@link #deleteBpmCategory(Long)}
* @return this row primary key
*/
int deleteBpmCategory(Long id);
/**
* 查询
*
* @param findDTO {@link #findBpmCategory(BpmCategoryDTO)}
* @return {@link BpmCategoryItemVo}
*/
Page<BpmCategoryItemVo> findBpmCategory(BpmCategoryDTO findDTO);
/**
* 更新字典状态
*
* @param id 字典 ID
* @param state
* @return
*/
Boolean updateState(Long id, Boolean state);
}

View File

@ -1,91 +0,0 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskAssigneeDTO;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskCommentDTO;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskTodoPageSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.task.BpmHistoricTaskInstanceGroupVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmHistoricTaskInstanceVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskDonePageItemVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskTodoPageItemVO;
import org.flowable.form.api.FormInfo;
import org.flowable.task.api.Task;
import java.util.List;
public interface BpmTaskService {
/**
* 待审核列表
*/
BpmPageResult<BpmTaskTodoPageItemVO> getTodoTaskPage(BpmTaskTodoPageSearchDTO dto);
/**
* 已完成的审批列表
*
* @return
*/
BpmPageResult<BpmTaskDonePageItemVO> getDoneTaskPage(BpmTaskTodoPageSearchDTO dto);
/**
* 同意
*/
void approveTask(BpmTaskAuditDTO taskAuditDTO);
/**
* 拒绝
*/
void rejectTask(BpmTaskAuditDTO taskAuditDTO);
/**
* 获取历史已审批的列表详情
* <p>
* 扁平的任务列表
*/
List<BpmHistoricTaskInstanceVO> getHistoricTaskListByProcessInstanceId(String processInstanceId, String tenantId);
/**
* 获取历史已审批的列表详情
* <p>
* 任务根据定义 ID 分组
*
* @param processInstanceId
* @param tenantId
* @return
*/
List<BpmHistoricTaskInstanceGroupVO> getHistoricTaskListGroupByProcessInstanceId(String processInstanceId,
String tenantId);
/**
* 获取实例正在审核的人列表
* <p>
* FIXME 该接口 web 不能正常响应
*/
List<Task> getActiveTasksByProcessInstanceId(String processInstanceId);
/**
* 获得流程任务列表
* FIXME 该接口 web 不能正常响应
*
* @param processInstanceIds 流程实例的编号数组
* @return 流程任务列表
*/
List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds);
FormInfo getTaskFormModel(String taskId);
/**
* 修改审批任务审批人
* <p>
* 注意:不是委派给其他人
*
* @param dto
*/
void assigneeTask(BpmTaskAssigneeDTO dto);
void commentTask(BpmTaskCommentDTO dto);
}

View File

@ -1,14 +1,14 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.definition.BpmProcessDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.process.BpmProcessDefinitionPageDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.definition.BpmnProcessDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessDefinitionPageDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessDefinitionVO;
import org.flowable.common.engine.impl.db.SuspensionState;
import org.flowable.engine.repository.Model;
import org.flowable.engine.repository.ProcessDefinition;
public interface BpmProcessDefinitionService {
public interface BpmnProcessDefinitionService {
/**
@ -25,7 +25,7 @@ public interface BpmProcessDefinitionService {
/**
* 获取活跃的流程定义分页
*/
BpmPageResult<BpmProcessDefinitionVO> getProcessDefinitionPage(BpmProcessDefinitionPageDTO request);
BpmPageResult<BpmnProcessDefinitionVO> getProcessDefinitionPage(BpmnProcessDefinitionPageDTO request);
/**
* 获得编号对应的 ProcessDefinition
@ -33,7 +33,7 @@ public interface BpmProcessDefinitionService {
* @param id 编号
* @return 流程定义
*/
BpmProcessDefinitionVO getProcessDefinition(String id);
BpmnProcessDefinitionVO getProcessDefinition(String id);
/**
* 获得 deploymentId 对应的 ProcessDefinition
@ -49,7 +49,7 @@ public interface BpmProcessDefinitionService {
* @param key 流程定义的标识
* @return 流程定义
*/
BpmProcessDefinitionVO getActiveProcessDefinitionByKey(String key);
BpmnProcessDefinitionVO getActiveProcessDefinitionByKey(String key);
/**
* 挂起/激活流程
@ -65,5 +65,5 @@ public interface BpmProcessDefinitionService {
*/
String getActiveProcessDefinitionId(String tenantId, String category);
void updateProcessDefinition(BpmProcessDefinitionUpdateDTO dto);
void updateProcessDefinition(BpmnProcessDefinitionUpdateDTO dto);
}

View File

@ -1,9 +1,9 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.process.*;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.*;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessInstancePageItemVO;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessInstanceVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstancePageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstanceVO;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.form.api.FormInfo;
@ -11,14 +11,14 @@ import org.flowable.form.api.FormInfo;
import javax.annotation.Nullable;
import javax.validation.Valid;
public interface BpmProcessInstanceService {
public interface BpmnProcessInstanceService {
/**
* 发起审核
*/
String createProcessInstance(BpmProcessInstanceCreateDTO processInstanceCreateDTO);
String createProcessInstance(BpmnProcessInstanceCreateDTO processInstanceCreateDTO);
String createProcessInstanceWithForm(BpmProcessInstanceCreateWithFormDTO createWithFormDTO);
String createProcessInstanceWithForm(BpmnProcessInstanceCreateWithFormDTO createWithFormDTO);
FormInfo getStartFormModel(String processDefinitionId, String processInstanceId);
@ -27,7 +27,7 @@ public interface BpmProcessInstanceService {
*
* @return true or false, true mean's cancelled
*/
Boolean cancelProcessInstance(BpmProcessInstanceCancelDTO processInstanceCancelDTO);
Boolean cancelProcessInstance(BpmnProcessInstanceCancelDTO processInstanceCancelDTO);
/**
* 获得流程实例的分页 / 我发起的审批列表
@ -35,7 +35,7 @@ public interface BpmProcessInstanceService {
* @param pageReqVO 分页请求
* @return 流程实例的分页
*/
BpmPageResult<BpmProcessInstancePageItemVO> getMyProcessInstancePage(@Valid BpmProcessInstanceMyPageReqVO pageReqVO);
BpmPageResult<BpmnProcessInstancePageItemVO> getMyProcessInstancePage(@Valid BpmnProcessInstanceMyPageReqVO pageReqVO);
/**
* 获得流程实例
@ -82,7 +82,7 @@ public interface BpmProcessInstanceService {
* @param tenantId 租户 ID
* @return 流程实例
*/
BpmProcessInstanceVO getProcessInstanceVO(BpmProcessInstanceQueryDTO dto);
BpmnProcessInstanceVO getProcessInstanceVO(BpmnProcessInstanceQueryDTO dto);
void deleteProcessInstance(String id, String reason);

View File

@ -1,45 +1,45 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelCreateDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelSearchDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelCreateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelSearchDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelUpdateDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.form.model.BpmModelBaseVO;
import cn.axzo.workflow.core.service.dto.response.model.BpmModelDetailVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.model.BpmnModelDetailVO;
import cn.axzo.workflow.core.service.dto.response.form.model.FormModelBaseVO;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Nullable;
@ApiOperation("流程模型 - 部署流程")
public interface BpmProcessModelService {
public interface BpmnProcessModelService {
/**
* 获取流程模型的查询结果
*/
BpmPageResult<BpmModelBaseVO> getModelPage(BpmModelSearchDTO dto);
BpmPageResult<FormModelBaseVO> getModelPage(BpmnModelSearchDTO dto);
/**
* 创建流程,
* return modelId的主键
*/
String createBpmModel(BpmModelCreateDTO dto);
String createBpmModel(BpmnModelCreateDTO dto);
String createBpmModelWithXml(String fileUrl);
/**
* 获取模型
*/
BpmModelDetailVO getById(String processModelId, @Nullable String tenantId);
BpmnModelDetailVO getById(String processModelId, @Nullable String tenantId);
/**
* 获取模型
*/
BpmModelDetailVO getByKey(String processModelKey, @Nullable String tenantId);
BpmnModelDetailVO getByKey(String processModelKey, @Nullable String tenantId);
/**
* 修改流程信息
*/
void updateBpmModel(BpmModelUpdateDTO dto);
void updateBpmModel(BpmnModelUpdateDTO dto);
/**
* 部署模型

View File

@ -0,0 +1,77 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAssigneeDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskCommentDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskTodoPageSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.*;
import org.flowable.form.api.FormInfo;
import java.util.List;
public interface BpmnTaskService {
/**
* 待审核列表
*/
BpmPageResult<BpmTaskTodoPageItemVO> getTodoTaskPage(BpmnTaskTodoPageSearchDTO dto);
/**
* 已完成的审批列表
*
* @return
*/
BpmPageResult<BpmnTaskDonePageItemVO> getDoneTaskPage(BpmnTaskTodoPageSearchDTO dto);
/**
* 同意
*/
void approveTask(BpmnTaskAuditDTO taskAuditDTO);
/**
* 拒绝
*/
void rejectTask(BpmnTaskAuditDTO taskAuditDTO);
/**
* 获取历史已审批的列表详情
* <p>
* 扁平的任务列表
*/
List<BpmnHistoricTaskInstanceVO> getHistoricTaskListByProcessInstanceId(String processInstanceId, String tenantId);
/**
* 获取历史已审批的列表详情
* <p>
* 任务根据定义 ID 分组
*
* @param processInstanceId
* @param tenantId
* @return
*/
List<BpmnHistoricTaskInstanceGroupVO> getHistoricTaskListGroupByProcessInstanceId(String processInstanceId,
String tenantId);
/**
* 获取实例正在审核的人列表
* <p>
*/
List<BpmTaskInstanceVO> getActiveTasksByProcessInstanceId(String processInstanceId, String tenantId);
FormInfo getTaskFormModel(String taskId);
/**
* 修改审批任务审批人
* <p>
* 注意:不是委派给其他人
*
* @param dto
*/
void assigneeTask(BpmnTaskAssigneeDTO dto);
void commentTask(BpmnTaskCommentDTO dto);
}

View File

@ -0,0 +1,55 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.category.CategoryCreateDTO;
import cn.axzo.workflow.core.service.dto.request.category.CategorySearchDTO;
import cn.axzo.workflow.core.service.dto.request.category.CategoryUpdateDTO;
import cn.axzo.workflow.core.service.dto.response.category.CategoryItemVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* Category的增删改查
*/
public interface CategoryService {
/**
* 创建
*
* @param createDTO {@link #createCategory(CategoryCreateDTO)}
* @return insert record count
*/
int createCategory(CategoryCreateDTO createDTO);
/**
* 修改
*
* @param updateDTO {@link #updateCategory(CategoryUpdateDTO)}
* @return update record count
*/
int updateCategory(CategoryUpdateDTO updateDTO);
/**
* 删除
*
* @param id {@link #deleteCategory(Long)}
* @return this row primary key
*/
int deleteCategory(Long id);
/**
* 查询
*
* @param findDTO {@link #findCategory(CategorySearchDTO)}
* @return {@link CategoryItemVO}
*/
Page<CategoryItemVO> findCategory(CategorySearchDTO findDTO);
/**
* 更新字典状态
*
* @param id 字典 ID
* @param state
* @return
*/
Boolean updateState(Long id, Boolean state);
}

View File

@ -11,7 +11,7 @@ import javax.annotation.Nullable;
* @author wangli
* @since 2023/7/19 16:46
*/
public interface BpmFormDefinitionService {
public interface FormDefinitionService {
FormDefinitionVO get(String formModeId, @Nullable String tenantId);

View File

@ -1,6 +1,6 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.form.FormContentUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.form.instance.FormContentUpdateDTO;
/**
* 表单实例相关接口
@ -8,7 +8,7 @@ import cn.axzo.workflow.core.service.dto.request.form.FormContentUpdateDTO;
* @author wangli
* @since 2023/7/21 15:19
*/
public interface BpmFormInstanceService {
public interface FormInstanceService {
/**
* 更新表单填写的数据

View File

@ -1,10 +1,10 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelSearchDTO;
import cn.axzo.workflow.core.service.dto.request.form.model.FormModelCreateDTO;
import cn.axzo.workflow.core.service.dto.request.form.model.FormModelUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.form.model.BpmModelBaseVO;
import cn.axzo.workflow.core.service.dto.response.form.model.FormModelBaseVO;
import javax.annotation.Nullable;
@ -14,17 +14,17 @@ import javax.annotation.Nullable;
* @author wangli
* @since 2023/7/24 23:47
*/
public interface BpmFormModelService {
public interface FormModelService {
String createFormModel(FormModelCreateDTO dto);
void updateFormModel(FormModelUpdateDTO dto);
BpmPageResult<BpmModelBaseVO> getModelPage(BpmModelSearchDTO dto);
BpmPageResult<FormModelBaseVO> getModelPage(BpmnModelSearchDTO dto);
BpmModelBaseVO getById(String formModelId, @Nullable String tenantId);
FormModelBaseVO getById(String formModelId, @Nullable String tenantId);
BpmModelBaseVO getByKey(String formModelKey, @Nullable String tenantId);
FormModelBaseVO getByKey(String formModelKey, @Nullable String tenantId);
String deployFormModelById(String formModelId, @Nullable String tenantId);

View File

@ -1,7 +1,7 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.repository.entity.ExtAxDictDO;
import cn.axzo.workflow.core.service.dto.response.model.BpmCategoryItemVo;
import cn.axzo.workflow.core.service.dto.response.category.CategoryItemVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@ -14,7 +14,7 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
nullValueCheckStrategy = ALWAYS,
imports = Arrays.class
)
public interface BpmCategoryConverter extends EntityConverter<BpmCategoryItemVo, ExtAxDictDO> {
public interface BpmCategoryConverter extends EntityConverter<CategoryItemVO, ExtAxDictDO> {
@Mapping(target = "id", source = "category.id")
@Mapping(target = "type", source = "category.type")
@ -22,5 +22,5 @@ public interface BpmCategoryConverter extends EntityConverter<BpmCategoryItemVo,
@Mapping(target = "value", source = "category.value")
@Mapping(target = "remark", source = "category.remark")
@Mapping(target = "status", source = "category.status")
BpmCategoryItemVo toVo(ExtAxDictDO category);
CategoryItemVO toVo(ExtAxDictDO category);
}

View File

@ -1,7 +1,7 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionVO;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessInstanceVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessDefinitionVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstanceVO;
import org.flowable.engine.history.HistoricProcessInstance;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@ -21,7 +21,7 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
nullValueCheckStrategy = ALWAYS,
imports = Arrays.class
)
public interface BpmHistoricProcessInstanceConverter extends EntityConverter<BpmProcessInstanceVO,
public interface BpmHistoricProcessInstanceConverter extends EntityConverter<BpmnProcessInstanceVO,
HistoricProcessInstance> {
@Mapping(target = "id", source = "entity.id")
@ -33,11 +33,11 @@ public interface BpmHistoricProcessInstanceConverter extends EntityConverter<Bpm
@Mapping(target = "businessKey", source = "entity.businessKey")
@Mapping(target = "variables", source = "entity.processVariables")
@Mapping(target = "startUserId", source = "entity.startUserId")
BpmProcessInstanceVO toVo(HistoricProcessInstance entity);
BpmnProcessInstanceVO toVo(HistoricProcessInstance entity);
default BpmProcessInstanceVO toVo(HistoricProcessInstance processInstance,
BpmProcessDefinitionVO processDefinition) {
BpmProcessInstanceVO vo = toVo(processInstance);
default BpmnProcessInstanceVO toVo(HistoricProcessInstance processInstance,
BpmnProcessDefinitionVO processDefinition) {
BpmnProcessInstanceVO vo = toVo(processInstance);
vo.setCategory(processDefinition.getCategory());
return vo;
}

View File

@ -1,6 +1,6 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.task.BpmHistoricTaskInstanceVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnHistoricTaskInstanceVO;
import org.flowable.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.mapstruct.Mapper;
@ -15,14 +15,14 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
* 历史任务实例的 MapStruts 转换器
*
* @author wangli
* @sine 2023/7/29 17:50
* @since 2023/7/29 17:50
*/
@Mapper(
componentModel = "spring",
nullValueCheckStrategy = ALWAYS,
imports = Arrays.class
)
public interface BpmHistoricTaskInstanceConverter extends EntityConverter<BpmHistoricTaskInstanceVO,
public interface BpmHistoricTaskInstanceConverter extends EntityConverter<BpmnHistoricTaskInstanceVO,
HistoricTaskInstance> {
/**
* @see MultiInstanceActivityBehavior#DELETE_REASON_END
@ -41,14 +41,14 @@ public interface BpmHistoricTaskInstanceConverter extends EntityConverter<BpmHis
@Mapping(target = "durationInMillis", source = "durationInMillis")
@Mapping(target = "tenantId", source = "tenantId")
@Mapping(target = "deleteReason", source = "deleteReason")
BpmHistoricTaskInstanceVO toVo(HistoricTaskInstance entity);
BpmnHistoricTaskInstanceVO toVo(HistoricTaskInstance entity);
default List<BpmHistoricTaskInstanceVO> toVosSkipMiEnd(List<HistoricTaskInstance> entities) {
default List<BpmnHistoricTaskInstanceVO> toVosSkipMiEnd(List<HistoricTaskInstance> entities) {
if (CollectionUtils.isEmpty(entities)) {
return Collections.emptyList();
}
List<BpmHistoricTaskInstanceVO> vos = new ArrayList<>();
List<BpmnHistoricTaskInstanceVO> vos = new ArrayList<>();
entities.stream()
.filter(i -> !Objects.equals(DELETE_REASON_END, i.getDeleteReason()))
.forEach(i -> vos.add(toVo(i)));

View File

@ -1,17 +1,17 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.model.BpmModelDetailVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.model.BpmnModelDetailVO;
import org.flowable.engine.repository.Model;
import org.springframework.util.ObjectUtils;
public class BpmModelConverter {
public static BpmModelDetailVO convert(Model model) {
public static BpmnModelDetailVO convert(Model model) {
if (ObjectUtils.isEmpty(model)) {
return null;
}
BpmModelDetailVO detailVO = new BpmModelDetailVO();
BpmnModelDetailVO detailVO = new BpmnModelDetailVO();
detailVO.setId(model.getId());
detailVO.setCreateAt(model.getCreateTime());
detailVO.setKey(model.getKey());

View File

@ -1,51 +0,0 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionPageItemRespVO;
import org.flowable.engine.repository.ProcessDefinition;
public class BpmProcessDefinitionConvert {
// public static List<BpmProcessDefinitionPageItemRespVO> convertList(List<ProcessDefinition> list,
// Map<String, Deployment> deploymentMap,
// Map<String, Object> processDefinitionDOMap,
// Integer version) {
// return BpmCollectionUtils.convertList(list, definition -> {
// Deployment deployment =
// definition.getDeploymentId() != null ? deploymentMap.get(definition.getDeploymentId())
// : null;
// Object definitionDO = processDefinitionDOMap.get(definition.getId());
// return convert(definition, deployment, definitionDO, version);
// });
// }
// public static BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean, Deployment deployment,
// Object processDefinitionExtDO, Integer version) {
// BpmProcessDefinitionPageItemRespVO respVO = convert(bean);
// respVO.setSyncModelPool(!Objects.nonNull(version) || bean.getVersion() <= version);
// respVO.setSuspensionState(bean.isSuspended() ? SuspensionState.SUSPENDED.getStateCode()
// : SuspensionState.ACTIVE.getStateCode());
// if (deployment != null) {
// respVO.setDeploymentTime(deployment.getDeploymentTime());
// }
// BeanUtils.copyProperties(processDefinitionExtDO, respVO);
// return respVO;
// }
public static BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean) {
if (bean == null) {
return null;
}
BpmProcessDefinitionPageItemRespVO bpmProcessDefinitionPageItemRespVO =
new BpmProcessDefinitionPageItemRespVO();
bpmProcessDefinitionPageItemRespVO.setId(bean.getId());
bpmProcessDefinitionPageItemRespVO.setVersion(bean.getVersion());
bpmProcessDefinitionPageItemRespVO.setName( bean.getName() );
bpmProcessDefinitionPageItemRespVO.setDescription( bean.getDescription() );
bpmProcessDefinitionPageItemRespVO.setCategory( bean.getCategory() );
return bpmProcessDefinitionPageItemRespVO;
}
}

View File

@ -1,6 +1,6 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessDefinitionVO;
import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.flowable.engine.repository.ProcessDefinition;
import org.mapstruct.Mapper;
@ -13,46 +13,46 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
* TODO
*
* @author wangli
* @sine 2023/7/25 22:44
* @since 2023/7/25 22:44
*/
@Mapper(
componentModel = "spring",
nullValueCheckStrategy = ALWAYS,
imports = Arrays.class
)
public interface BpmProcessDefinitionConverter extends EntityConverter<BpmProcessDefinitionVO, ProcessDefinition> {
public interface BpmProcessDefinitionConverter extends EntityConverter<BpmnProcessDefinitionVO, ProcessDefinition> {
@Override
default BpmProcessDefinitionVO toVo(ProcessDefinition entity) {
default BpmnProcessDefinitionVO toVo(ProcessDefinition entity) {
if (entity == null) {
return null;
}
BpmProcessDefinitionVO bpmProcessDefinitionVO = new BpmProcessDefinitionVO();
BpmnProcessDefinitionVO bpmnProcessDefinitionVO = new BpmnProcessDefinitionVO();
if (entity.getId() != null) {
bpmProcessDefinitionVO.setId(entity.getId());
bpmnProcessDefinitionVO.setId(entity.getId());
}
if (entity.getName() != null) {
bpmProcessDefinitionVO.setName(entity.getName());
bpmnProcessDefinitionVO.setName(entity.getName());
}
if (entity.getKey() != null) {
bpmProcessDefinitionVO.setKey(entity.getKey());
bpmnProcessDefinitionVO.setKey(entity.getKey());
}
if (entity.getDescription() != null) {
bpmProcessDefinitionVO.setDescription(entity.getDescription());
bpmnProcessDefinitionVO.setDescription(entity.getDescription());
}
if (entity.getCategory() != null) {
bpmProcessDefinitionVO.setCategory(entity.getCategory());
bpmnProcessDefinitionVO.setCategory(entity.getCategory());
}
if (entity.getTenantId() != null) {
bpmProcessDefinitionVO.setTenantId(entity.getTenantId());
bpmnProcessDefinitionVO.setTenantId(entity.getTenantId());
}
bpmProcessDefinitionVO.setVersion(entity.getVersion());
bpmnProcessDefinitionVO.setVersion(entity.getVersion());
ProcessDefinitionEntity entitySource = (ProcessDefinitionEntity) entity;
bpmProcessDefinitionVO.setSuspensionState(entitySource.getSuspensionState());
bpmnProcessDefinitionVO.setSuspensionState(entitySource.getSuspensionState());
return bpmProcessDefinitionVO;
return bpmnProcessDefinitionVO;
}
}

View File

@ -1,136 +0,0 @@
//package cn.axzo.workflow.core.service.converter;
//
//import cn.axzo.workflow.core.repository.entity.BpmProcessInstanceExtDO;
//import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
//import cn.axzo.workflow.core.service.dto.response.process.BpmProcessInstancePageItemVO;
//import org.flowable.task.api.Task;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//
//public class BpmProcessInstanceConvert {
//
// public static BpmPageResult<BpmProcessInstancePageItemVO> convertPage(BpmPageResult<BpmProcessInstanceExtDO> page,
// Map<String, List<Task>> taskMap) {
// List<BpmProcessInstancePageItemVO> list = convertList(page.getList());
// list.forEach(respVO -> respVO.setTasks(convertList2(taskMap.get(respVO.getId()))));
// return new BpmPageResult<>(list, page.getTotal());
// }
//
// public static List<BpmProcessInstancePageItemVO> convertList(List<BpmProcessInstanceExtDO> list){
// if ( list == null ) {
// return null;
// }
//
// List<BpmProcessInstancePageItemVO> list1 = new ArrayList<BpmProcessInstancePageItemVO>( list.size() );
// for ( BpmProcessInstanceExtDO bpmProcessInstanceExtDO : list ) {
// list1.add( convert( bpmProcessInstanceExtDO ) );
// }
//
// return list1;
// }
//
// public static BpmProcessInstancePageItemVO convert(BpmProcessInstanceExtDO bean){
// if ( bean == null ) {
// return null;
// }
//
// BpmProcessInstancePageItemVO bpmProcessInstancePageItemRespVO = new BpmProcessInstancePageItemVO();
//
// bpmProcessInstancePageItemRespVO.setId( bean.getProcessInstanceId() );
// bpmProcessInstancePageItemRespVO.setCustomProInstId( bean.getCustomProInstId() );
// bpmProcessInstancePageItemRespVO.setName( bean.getName() );
// bpmProcessInstancePageItemRespVO.setProcessDefinitionId( bean.getProcessDefinitionId() );
// bpmProcessInstancePageItemRespVO.setCategory( bean.getCategory() );
// bpmProcessInstancePageItemRespVO.setStatus( bean.getStatus() );
// bpmProcessInstancePageItemRespVO.setResult(bean.getResult());
// bpmProcessInstancePageItemRespVO.setCreateTime(bean.getCreateAt());
// bpmProcessInstancePageItemRespVO.setEndTime(bean.getEndTime());
// bpmProcessInstancePageItemRespVO.setStartUserName( bean.getStartUserName() );
//
// return bpmProcessInstancePageItemRespVO;
// }
//
// public static List<BpmProcessInstancePageItemVO.Task> convertList2(List<Task> tasks){
// if ( tasks == null ) {
// return null;
// }
//
// List<BpmProcessInstancePageItemVO.Task> list = new ArrayList<BpmProcessInstancePageItemVO.Task>( tasks.size
// () );
// for ( Task task : tasks ) {
// list.add( taskToTask( task ) );
// }
//
// return list;
// }
//
//// default BpmProcessInstanceVO convert2(HistoricProcessInstance processInstance, BpmProcessInstanceExtDO
// processInstanceExt,
//// ProcessDefinition processDefinition, BpmProcessDefinitionExtDO
// processDefinitionExt,
//// String bpmnXml, AdminUserRespDTO startUser, DeptRespDTO dept) {
//// BpmProcessInstanceRespVO respVO = convert2(processInstance);
//// copyTo(processInstanceExt, respVO);
//// // definition
//// respVO.setProcessDefinition(convert2(processDefinition));
//// copyTo(processDefinitionExt, respVO.getProcessDefinition());
//// respVO.getProcessDefinition().setBpmnXml(bpmnXml);
//// // user
////// if (startUser != null) {
////// respVO.setStartUser(convert2(startUser));
////// if (dept != null) {
////// respVO.getStartUser().setDeptName(dept.getName());
////// }
////// }
////
//// String startUserId = processInstance.getStartUserId();
//// String[] s = startUserId.split("_");
//// Long startWorkspaceId = Long.valueOf(s[0]);
//// Long startIdentityId = Long.valueOf(s[1]);
////
//// BpmProcessInstanceRespVO.User startUser1 = new BpmProcessInstanceRespVO.User();
//// startUser1.setWorkspaceId(startWorkspaceId);
//// startUser1.setIdentityId(startIdentityId);
//// respVO.setStartUser(startUser1);
////
//// return respVO;
//// }
////
//// BpmProcessInstanceRespVO convert2(HistoricProcessInstance bean);
////
//// @Mapping(source = "from.id", target = "to.id", ignore = true)
//// void copyTo(BpmProcessInstanceExtDO from, @MappingTarget BpmProcessInstanceRespVO to);
////
//// BpmProcessInstanceRespVO.ProcessDefinition convert2(ProcessDefinition bean);
////
//// @Mapping(source = "from.id", target = "to.id", ignore = true)
//// void copyTo(BpmProcessDefinitionExtDO from, @MappingTarget BpmProcessInstanceRespVO.ProcessDefinition to);
////
//// BpmProcessInstanceRespVO.User convert2(AdminUserRespDTO bean);
////
//// default BpmProcessInstanceResultEvent convert(Object source, HistoricProcessInstance instance, Integer result) {
//// BpmProcessInstanceResultEvent event = new BpmProcessInstanceResultEvent(source);
//// event.setId(instance.getId());
//// event.setProcessDefinitionKey(instance.getProcessDefinitionKey());
//// event.setBusinessKey(instance.getBusinessKey());
//// event.setResult(result);
//// return event;
//// }
//
// public static BpmProcessInstancePageItemVO.Task taskToTask(Task task) {
// if ( task == null ) {
// return null;
// }
//
// BpmProcessInstancePageItemVO.Task task1 = new BpmProcessInstancePageItemVO.Task();
//
// task1.setId( task.getId() );
// task1.setName( task.getName() );
//
// return task1;
// }
//
//
//}

View File

@ -1,6 +1,6 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessInstancePageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstancePageItemVO;
import org.flowable.engine.history.HistoricProcessInstance;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@ -20,7 +20,7 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
nullValueCheckStrategy = ALWAYS,
imports = Arrays.class
)
public interface BpmProcessInstancePageItemConverter extends EntityConverter<BpmProcessInstancePageItemVO,
public interface BpmProcessInstancePageItemConverter extends EntityConverter<BpmnProcessInstancePageItemVO,
HistoricProcessInstance> {
@Mapping(target = "id", source = "entity.id")
@ -30,5 +30,5 @@ public interface BpmProcessInstancePageItemConverter extends EntityConverter<Bpm
@Mapping(target = "result", source = "entity.businessStatus")
@Mapping(target = "startTime", source = "entity.startTime")
@Mapping(target = "endTime", source = "entity.endTime")
BpmProcessInstancePageItemVO toVo(HistoricProcessInstance entity);
BpmnProcessInstancePageItemVO toVo(HistoricProcessInstance entity);
}

View File

@ -1,108 +0,0 @@
package cn.axzo.workflow.core.service.converter;
import org.flowable.common.engine.impl.db.SuspensionState;
import org.mapstruct.factory.Mappers;
public class BpmTaskConvert {
// public static TaskExtDO convertTaskExt(DelegateTask task) {
// String assignee = task.getAssignee();
// TaskExtDO taskExtDO = new TaskExtDO();
// taskExtDO.setTaskId(task.getId());
// taskExtDO.setTenantId(task.getTenantId());
// taskExtDO.setUserId(assignee);
// taskExtDO.setProcessDefinitionId(task.getProcessDefinitionId());
// taskExtDO.setProcessInstanceId(task.getProcessInstanceId());
// taskExtDO.setName(task.getName());
// taskExtDO.setCreateAt(task.getCreateTime());
// taskExtDO.setUserName(task.getOwner());
// return taskExtDO;
// }
// public static List<BpmTaskDonePageItemRespVO> convertList2(List<HistoricTaskInstance> tasks,
// Map<String, TaskExtDO> bpmTaskExtDOMap,
// Map<String, HistoricProcessInstance>
// historicProcessInstanceMap) {
// return BpmCollectionUtils.convertList(tasks, task -> {
// BpmTaskDonePageItemRespVO respVO = convert2(task);
// TaskExtDO taskExtDO = bpmTaskExtDOMap.get(task.getId());
// BeanUtils.copyProperties(taskExtDO, respVO);
// HistoricProcessInstance processInstance = historicProcessInstanceMap.get(
// task.getProcessInstanceId());
// if (processInstance != null) {
// String startUserId = processInstance.getStartUserId();
// //convert
// BpmTaskTodoPageItemRespVO.ProcessInstance processInstance1 = new BpmTaskTodoPageItemRespVO
// .ProcessInstance();
// processInstance1.setId(processInstance.getId());
// processInstance1.setName(processInstance.getName());
// processInstance1.setProcessDefinitionId(processInstance.getProcessDefinitionId());
// processInstance1.setStartUserId(startUserId);
// respVO.setProcessInstance(processInstance1);
// }
// return respVO;
// });
// }
// public static BpmTaskDoneTodoPageItemVO convert2(HistoricTaskInstance bean) {
// if (bean == null) {
// return null;
// }
//
// BpmTaskDoneTodoPageItemVO bpmTaskDonePageItemRespVO = new BpmTaskDoneTodoPageItemVO();
// bpmTaskDonePageItemRespVO.setId(bean.getId());
// bpmTaskDonePageItemRespVO.setName(bean.getName());
// bpmTaskDonePageItemRespVO.setClaimTime(bean.getClaimTime());
// bpmTaskDonePageItemRespVO.setCreateTime(bean.getCreateTime());
// bpmTaskDonePageItemRespVO.setEndTime(bean.getEndTime());
// bpmTaskDonePageItemRespVO.setDurationInMillis(bean.getDurationInMillis());
//
// return bpmTaskDonePageItemRespVO;
// }
BpmTaskConvert INSTANCE = Mappers.getMapper(BpmTaskConvert.class);
// public static List<BpmTaskTodoPageItemRespVO> convertList1(List<Task> tasks,
// Map<String, ProcessInstance> processInstanceMap) {
// return BpmCollectionUtils.convertList(tasks, task -> {
// BpmTaskTodoPageItemRespVO respVO = convert1(task);
// ProcessInstance processInstance = processInstanceMap.get(task.getProcessInstanceId());
// if (processInstance != null) {
// //convert
// BpmTaskTodoPageItemRespVO.ProcessInstance processInstance1 = new BpmTaskTodoPageItemRespVO
// .ProcessInstance();
// processInstance1.setId(processInstance.getId());
// processInstance1.setName(
// StrUtil.isBlank(processInstance.getName()) ? processInstance.getProcessDefinitionName()
// : processInstance.getName());
// processInstance1.setProcessDefinitionId(processInstance.getProcessDefinitionId());
// processInstance1.setStartUserId(processInstance.getStartUserId());
// respVO.setProcessInstance(processInstance1);
// }
// return respVO;
// });
// }
// public static BpmTaskTodoPageItemVO convert1(Task bean) {
// if (bean == null) {
// return null;
// }
//
// BpmTaskTodoPageItemVO bpmTaskTodoPageItemRespVO = new BpmTaskTodoPageItemVO();
//
// bpmTaskTodoPageItemRespVO.setSuspensionState(convertSuspendedToSuspensionState(bean.isSuspended()));
// bpmTaskTodoPageItemRespVO.setId( bean.getId() );
// bpmTaskTodoPageItemRespVO.setName( bean.getName() );
// bpmTaskTodoPageItemRespVO.setClaimTime( bean.getClaimTime() );
// bpmTaskTodoPageItemRespVO.setCreateTime( bean.getCreateTime() );
//
// return bpmTaskTodoPageItemRespVO;
// }
public static Integer convertSuspendedToSuspensionState(boolean suspended) {
return suspended ? SuspensionState.SUSPENDED.getStateCode() :
SuspensionState.ACTIVE.getStateCode();
}
}

View File

@ -0,0 +1,37 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmTaskInstanceVO;
import org.flowable.task.api.Task;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import java.util.Arrays;
import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
/**
* 运行中的审批任务的 VO 转换器
*
* @author wangli
* @since 2023/7/29 23:23
*/
@Mapper(
componentModel = "spring",
nullValueCheckStrategy = ALWAYS,
imports = Arrays.class
)
public interface BpmTaskConverter extends EntityConverter<BpmTaskInstanceVO, Task> {
@Mapping(target = "processInstanceId", source = "processInstanceId")
@Mapping(target = "processDefinitionId", source = "processDefinitionId")
@Mapping(target = "taskId", source = "id")
@Mapping(target = "taskDefinitionKey", source = "taskDefinitionKey")
@Mapping(target = "name", source = "name")
@Mapping(target = "owner", source = "owner")
@Mapping(target = "assignee", source = "assignee")
@Mapping(target = "createTime", source = "createTime")
@Mapping(target = "tenantId", source = "tenantId")
@Mapping(target = "formKey", source = "formKey")
@Mapping(target = "category", source = "category")
@Override
BpmTaskInstanceVO toVo(Task entity);
}

View File

@ -1,7 +1,7 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskDonePageItemVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskTodoPageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmTaskTodoPageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnTaskDonePageItemVO;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.mapstruct.Mapper;
@ -16,7 +16,7 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
* TODO
*
* @author wangli
* @sine 2023/7/26 23:37
* @since 2023/7/26 23:37
*/
@Mapper(
componentModel = "spring",
@ -24,14 +24,14 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
imports = Arrays.class
)
public interface BpmTaskDonePageItemConverter extends EntityConverter<BpmTaskDonePageItemVO, HistoricTaskInstance> {
public interface BpmTaskDonePageItemConverter extends EntityConverter<BpmnTaskDonePageItemVO, HistoricTaskInstance> {
BpmTaskTodoPageItemConverter todoConverter = Mappers.getMapper(BpmTaskTodoPageItemConverter.class);
@Override
default BpmTaskDonePageItemVO toVo(HistoricTaskInstance entity) {
default BpmnTaskDonePageItemVO toVo(HistoricTaskInstance entity) {
BpmTaskTodoPageItemVO todo = todoConverter.toVo(entity);
BpmTaskDonePageItemVO vo = new BpmTaskDonePageItemVO();
BpmnTaskDonePageItemVO vo = new BpmnTaskDonePageItemVO();
BeanUtils.copyProperties(todo, vo);
vo.setEndTime(entity.getEndTime());
vo.setDurationInMillis(entity.getDurationInMillis());
@ -39,14 +39,14 @@ public interface BpmTaskDonePageItemConverter extends EntityConverter<BpmTaskDon
return vo;
}
default List<BpmTaskDonePageItemVO> toVos(List<HistoricTaskInstance> tasks,
Map<String, HistoricProcessInstance> historicProcessInstanceMap) {
default List<BpmnTaskDonePageItemVO> toVos(List<HistoricTaskInstance> tasks,
Map<String, HistoricProcessInstance> historicProcessInstanceMap) {
if (tasks.isEmpty()) {
return Collections.emptyList();
}
List<BpmTaskDonePageItemVO> vos = new ArrayList<>();
List<BpmnTaskDonePageItemVO> vos = new ArrayList<>();
tasks.forEach(i -> {
BpmTaskDonePageItemVO vo = toVo(i);
BpmnTaskDonePageItemVO vo = toVo(i);
HistoricProcessInstance instance = historicProcessInstanceMap.getOrDefault(i.getProcessInstanceId(), null);
if (Objects.nonNull(instance)) {
vo.setProcessInstanceId(instance.getId());

View File

@ -1,6 +1,6 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskTodoPageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmTaskTodoPageItemVO;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.mapstruct.Mapper;
@ -14,7 +14,7 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
* TODO
*
* @author wangli
* @sine 2023/7/26 23:00
* @since 2023/7/26 23:00
*/
@Mapper(
componentModel = "spring",

View File

@ -1,6 +1,6 @@
package cn.axzo.workflow.core.service.converter;
import cn.axzo.workflow.core.service.dto.response.form.model.BpmModelBaseVO;
import cn.axzo.workflow.core.service.dto.response.form.model.FormModelBaseVO;
import org.flowable.engine.repository.Model;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@ -20,7 +20,7 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS;
nullValueCheckStrategy = ALWAYS,
imports = Arrays.class
)
public interface FormModelConverter extends EntityConverter<BpmModelBaseVO, Model> {
public interface FormModelConverter extends EntityConverter<FormModelBaseVO, Model> {
@Mapping(target = "id", source = "entity.id")
@Mapping(target = "name", source = "entity.name")
@ -30,6 +30,6 @@ public interface FormModelConverter extends EntityConverter<BpmModelBaseVO, Mode
@Mapping(target = "version", source = "entity.version")
@Mapping(target = "createAt", source = "entity.createTime")
@Mapping(target = "updateAt", source = "entity.lastUpdateTime")
BpmModelBaseVO toVo(Model entity);
FormModelBaseVO toVo(Model entity);
}

View File

@ -1,43 +0,0 @@
package cn.axzo.workflow.core.service.dto.request;
import cn.axzo.workflow.core.common.enums.BpmFlowMultiMode;
import lombok.Data;
@Data
public class BpmJsonNodeProperty {
/**
* 是否是多实例Task节点
*/
private Boolean isMultiTask;
/**
* Task 多实例模式OR"或签"AND"会签"
*/
private BpmFlowMultiMode multiMode;
/**
* 审批人为空是否允许自动跳过
*/
private Boolean allowSkip = false;
/**
* 条件节点中是否是默认分支可以都不传;
*/
private Boolean defaultCondition;
/**
* 条件分支的Key
*/
private String conditionBranchKey;
/**
* 条件节点当ConditionKey的值是多少走该分支
*/
private Integer conditionBranchValue;
/**
* 发起时使用的表单 key
*/
private String formKey;
}

View File

@ -1,7 +1,7 @@
package cn.axzo.workflow.core.service.dto;
package cn.axzo.workflow.core.service.dto.request.bpmn;
import cn.axzo.workflow.core.common.enums.BpmFlowNodeType;
import cn.axzo.workflow.core.service.dto.request.BpmJsonNodeProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -9,8 +9,12 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* JSON 版本的 BPMN 协议模型
*/
@ApiModel("JSON 版本的 BPMN 协议模型")
@Data
public class BpmJsonNode {
public class BpmnJsonNode {
@ApiModelProperty(value = "节点ID", required = true)
private String id;
@ -18,24 +22,24 @@ public class BpmJsonNode {
private String parentId;
/**
* {@link BpmFlowNodeType}
* */
*/
@ApiModelProperty(value = "节点类型task/branch", required = true)
private String type; // task, branch,
@ApiModelProperty(value = "节点名称", required = true)
private String name;
// private Map<> properties; //ext : Object; 会签/或签
// private Map<> properties; //ext : Object; 会签/或签
@ApiModelProperty(value = "子节点信息", required = true)
private BpmJsonNode children;
private BpmnJsonNode children;
@ApiModelProperty(value = "分支节点信息", required = true)
private List<BpmJsonNode> branches;
private BpmJsonNodeProperty property;
private List<BpmnJsonNode> branches;
private BpmnJsonNodeProperty property;
/* 内部使用,不需要外界传 */
private transient Map incoming = new HashMap();
public BpmJsonNode() {
public BpmnJsonNode() {
}
public String getId() {
@ -70,27 +74,27 @@ public class BpmJsonNode {
this.name = name;
}
public BpmJsonNode getChildren() {
public BpmnJsonNode getChildren() {
return children;
}
public void setChildren(BpmJsonNode children) {
public void setChildren(BpmnJsonNode children) {
this.children = children;
}
public List<BpmJsonNode> getBranches() {
public List<BpmnJsonNode> getBranches() {
return branches;
}
public void setBranches(List<BpmJsonNode> branches) {
public void setBranches(List<BpmnJsonNode> branches) {
this.branches = branches;
}
public BpmJsonNodeProperty getProperty() {
public BpmnJsonNodeProperty getProperty() {
return property;
}
public void setProperty(BpmJsonNodeProperty property) {
public void setProperty(BpmnJsonNodeProperty property) {
this.property = property;
}

View File

@ -0,0 +1,56 @@
package cn.axzo.workflow.core.service.dto.request.bpmn;
import cn.axzo.workflow.core.common.enums.BpmFlowMultiMode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* JSON 版本的 BPMN 协议中 UserTask 节点的属性扩展模型
*/
@ApiModel("JSON 版本的 BPMN 协议中 UserTask 节点的属性扩展模型")
@Data
public class BpmnJsonNodeProperty {
/**
* 是否是多实例Task节点
*/
@ApiModelProperty("是否是多实例Task节点")
private Boolean isMultiTask;
/**
* Task 多实例模式OR"或签"AND"会签"
*/
@ApiModelProperty(value = "Task 多实例模式OR或签AND会签")
private BpmFlowMultiMode multiMode;
/**
* 审批人为空是否允许自动跳过
*/
@ApiModelProperty(value = "审批人为空是否允许自动跳过")
private Boolean allowSkip = false;
/**
* 条件节点中是否是默认分支可以都不传;
*/
@ApiModelProperty(value = "条件节点中是否是默认分支,可以都不传")
private Boolean defaultCondition;
/**
* 条件分支的Key
*/
@ApiModelProperty(value = "条件分支的Key")
private String conditionBranchKey;
/**
* 条件节点当ConditionKey的值是多少走该分支
*/
@ApiModelProperty(value = "条件节点当ConditionKey的值是多少走该分支")
private Integer conditionBranchValue;
/**
* 发起时使用的表单 key
*/
@ApiModelProperty(value = "发起时使用的表单 key")
private String formKey;
}

View File

@ -1,6 +1,7 @@
package cn.axzo.workflow.core.service.dto.request.definition;
package cn.axzo.workflow.core.service.dto.request.bpmn.definition;
import cn.axzo.workflow.core.service.dto.BpmJsonNode;
import cn.axzo.workflow.core.service.dto.request.bpmn.BpmnJsonNode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -8,18 +9,19 @@ import javax.validation.Valid;
import javax.validation.constraints.NotNull;
/**
* TODO
* 用于更新流程定义的入参模型
*
* @author wangli
* @since 2023/7/26 10:07
*/
@ApiModel("用于更新流程定义的入参模型")
@Data
public class BpmProcessDefinitionUpdateDTO {
public class BpmnProcessDefinitionUpdateDTO {
@ApiModelProperty(value = "流程模型 ID")
private String processModelId;
@ApiModelProperty(value = "JSON 转义的流程定义内容", notes = "枢智业务线在用")
@Valid
@NotNull(message = "模型定义内容不能为空")
private BpmJsonNode bpmJson;
private BpmnJsonNode bpmJson;
}

View File

@ -1,14 +1,19 @@
package cn.axzo.workflow.core.service.dto.request.model;
package cn.axzo.workflow.core.service.dto.request.bpmn.model;
import cn.axzo.workflow.core.service.dto.BpmJsonNode;
import cn.axzo.workflow.core.service.dto.request.bpmn.BpmnJsonNode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* 创建流程模型的入参模型
*/
@ApiModel("创建流程模型的入参模型")
@Data
public class BpmModelCreateDTO {
public class BpmnModelCreateDTO {
@ApiModelProperty(value = "流程模型标识", example = "process_key", hidden = true)
@Length(max = 255, message = "流程标识最长只支持255个字符")
@ -24,28 +29,20 @@ public class BpmModelCreateDTO {
private String name;
/**
* 所属业务
* 默认 1
* OA 2
* 自定义分类
*/
@ApiModelProperty(value = "所属业务", notes = "由业务自定义", example = "1")
@ApiModelProperty(value = "自定义分类", notes = "由业务自定义", example = "1")
private String category;
/**
* MetaInfo 自定义数据可以放icon等任何
* */
// @ApiModelProperty(value = "MetaInfo 自定义数据可以放icon等任何", example = "1")
// private Object metaInfo;
/**
* 流程的Json 结构
*/
@ApiModelProperty(value = "流程的Json 结构", example = "1")
private BpmJsonNode node;
private BpmnJsonNode node;
/**
* 租户Id
* */
*/
@ApiModelProperty(value = "租户Id", example = "1")
@NotBlank(message = "租户 ID 不能为空")
private String tenantId;

View File

@ -0,0 +1,41 @@
package cn.axzo.workflow.core.service.dto.request.bpmn.model;
import cn.axzo.workflow.core.service.dto.request.BpmPageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 流程模型搜索入参模型
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("流程模型搜索入参模型")
@Data
public class BpmnModelSearchDTO extends BpmPageParam {
/**
* 标识
*/
@ApiModelProperty(value = "流程模型标识", example = "process1641042089407", notes = "精准匹配")
private String key;
/**
* 名称
*/
@ApiModelProperty(value = "流程模型名字", example = "流程模型名称", notes = "模糊匹配")
private String name;
/**
* 流程分类
*/
@ApiModelProperty(value = "流程模型分类", example = "1")
private String category;
/**
* 工作台ID
*/
@ApiModelProperty(value = "租户 ID", example = "1")
private String tenantId;
}

View File

@ -0,0 +1,20 @@
package cn.axzo.workflow.core.service.dto.request.bpmn.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 修改流程模型入参模型
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("修改流程模型入参模型")
@Data
public class BpmnModelUpdateDTO extends BpmnModelCreateDTO {
@ApiModelProperty(value = "流程模型 ID", required = true)
private String processModelId;
}

View File

@ -1,18 +1,20 @@
package cn.axzo.workflow.core.service.dto.request.process;
package cn.axzo.workflow.core.service.dto.request.bpmn.process;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* TODO
* 最基础的流程实例查询入参模型
*
* @author wangli
* @since 2023/7/14 13:48
*/
@ApiModel("最基础的流程实例查询入参模型")
@Data
public class BpmBasicProcessInstanceQueryDTO {
public class BpmnBasicProcessInstanceQueryDTO {
/**
* 流程实例 ID
*/

View File

@ -1,14 +1,21 @@
package cn.axzo.workflow.core.service.dto.request.process;
package cn.axzo.workflow.core.service.dto.request.bpmn.process;
import cn.axzo.workflow.core.service.dto.request.BpmPageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
/**
* 流程定义分页查询入参模型
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("流程定义分页查询入参模型")
@Data
public class BpmProcessDefinitionPageDTO extends BpmPageParam {
public class BpmnProcessDefinitionPageDTO extends BpmPageParam {
@ApiModelProperty(value = "流程标识,传了精准匹配")
@NotBlank(message = "流程标识不能为空")

View File

@ -1,5 +1,6 @@
package cn.axzo.workflow.core.service.dto.request.process;
package cn.axzo.workflow.core.service.dto.request.bpmn.process;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -11,8 +12,9 @@ import javax.validation.constraints.NotBlank;
* @author wangli
* @since 2023/7/17 09:34
*/
@ApiModel("取消流程实例的入参模型")
@Data
public class BpmProcessInstanceCancelDTO {
public class BpmnProcessInstanceCancelDTO {
/**
* 流程实例的编号
@ -43,7 +45,7 @@ public class BpmProcessInstanceCancelDTO {
* 用户 ID
*/
@NotBlank(message = "用户编号不能为空")
@ApiModelProperty(value = "操作人编号")
@ApiModelProperty(value = "操作人标识")
private String userId;
/**

View File

@ -1,5 +1,7 @@
package cn.axzo.workflow.core.service.dto.request.process;
package cn.axzo.workflow.core.service.dto.request.bpmn.process;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -7,8 +9,12 @@ import javax.validation.constraints.NotEmpty;
import java.util.HashMap;
import java.util.Map;
/**
* 创建流程实例的入参模型
*/
@ApiModel("创建流程实例的入参模型")
@Data
public class BpmProcessInstanceCreateDTO {
public class BpmnProcessInstanceCreateDTO {
/**
* 流程定义的 id
@ -35,12 +41,13 @@ public class BpmProcessInstanceCreateDTO {
/**
* 发起人所在的(企业/项目)租户ID
*/
@NotBlank(message = "租户不能为空")
@NotBlank(message = "租户ID不能为空")
private String tenantId;
/**
* 发起人的身份ID
*/
@ApiModelProperty(value = "操作人标识")
@NotBlank(message = "用户Id不能为空")
private String userId;
@ -53,10 +60,7 @@ public class BpmProcessInstanceCreateDTO {
/**
* 自定义的流程实例名称
*/
@ApiModelProperty(value = "自定义的流程实例名称")
private String customProcessInstanceName;
/**
* 拓展业务字段
*/
private Object ext;
}

View File

@ -1,5 +1,6 @@
package cn.axzo.workflow.core.service.dto.request.process;
package cn.axzo.workflow.core.service.dto.request.bpmn.process;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -7,14 +8,15 @@ import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
/**
* 创建工作流实例,同时携带表单
* 创建工作流实例同时携带表单的入参模型
*
* @author wangli
* @since 2023/7/20 15:49
*/
@ApiModel("创建工作流实例同时携带表单的入参模型")
@EqualsAndHashCode(callSuper = true)
@Data
public class BpmProcessInstanceCreateWithFormDTO extends BpmProcessInstanceCreateDTO {
public class BpmnProcessInstanceCreateWithFormDTO extends BpmnProcessInstanceCreateDTO {
/**
* 表单的定义 ID
@ -30,6 +32,7 @@ public class BpmProcessInstanceCreateWithFormDTO extends BpmProcessInstanceCreat
* <p>
* 一般不用设置
*/
@ApiModelProperty(value = "用于接入外部传入的信息", hidden = true)
private String outcome;
}

View File

@ -1,4 +1,4 @@
package cn.axzo.workflow.core.service.dto.request.process;
package cn.axzo.workflow.core.service.dto.request.bpmn.process;
import cn.axzo.workflow.core.common.enums.BpmProcessInstanceResultEnum;
import cn.axzo.workflow.core.service.dto.request.BpmPageParam;
@ -12,25 +12,28 @@ import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.util.Date;
@ApiModel("管理后台 - 流程实例的分页 Item Response VO")
/**
* 用于查询我的发起的流程实例入参模型
*/
@ApiModel("用于查询我的发起的流程实例入参模型")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmProcessInstanceMyPageReqVO extends BpmPageParam {
@ApiModelProperty(value = "流程名称", example = "芋道", hidden = true)
public class BpmnProcessInstanceMyPageReqVO extends BpmPageParam {
@ApiModelProperty(value = "流程名称")
private String name;
@ApiModelProperty(value = "流程定义的编号", example = "2048", hidden = true)
@ApiModelProperty(value = "流程定义的编号", hidden = true)
private String processDefinitionId;
@ApiModelProperty(value = "业务KEY")
private String businessKey;
@ApiModelProperty(value = "审核状态 (1,审批中 2,已通过 3,已驳回 4,已撤销)", notes = "参见 BpmProcessInstanceResultEnum", example =
"2")
@ApiModelProperty(value = "审核状态(PROCESSING:审核中,APPROVED:已通过,REJECTED:已拒绝,CANCELLED:已取消)", example = "APPROVED")
private BpmProcessInstanceResultEnum result;
@ApiModelProperty(value = "审核单类型", notes = "参见 bpm_model_category 数据字典", example = "1")
@ApiModelProperty(value = "自定义分类")
private String category;
@ApiModelProperty(value = "发起时间")
@ -44,14 +47,14 @@ public class BpmProcessInstanceMyPageReqVO extends BpmPageParam {
/**
* 发起人所在的(企业/项目)工作台ID
*/
@ApiModelProperty(value = "租户Id", required = true, example = "1")
@ApiModelProperty(value = "租户Id", required = true)
@NotBlank(message = "租户不能为空")
private String tenantId;
/**
* 发起人的身份ID
*/
@ApiModelProperty(value = "用户 ID ", required = true, example = "1")
@ApiModelProperty(value = "操作人标识", required = true)
@NotBlank(message = "用户编号不能为空")
private String userId;
}

View File

@ -1,4 +1,4 @@
package cn.axzo.workflow.core.service.dto.request.process;
package cn.axzo.workflow.core.service.dto.request.bpmn.process;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -12,7 +12,7 @@ import lombok.Data;
*/
@Data
@ApiModel("查询流程实例的入参模型")
public class BpmProcessInstanceQueryDTO extends BpmBasicProcessInstanceQueryDTO {
public class BpmnProcessInstanceQueryDTO extends BpmnBasicProcessInstanceQueryDTO {
/**

View File

@ -0,0 +1,32 @@
package cn.axzo.workflow.core.service.dto.request.bpmn.task;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 转交审批任务的入参模型
*
* @author wangli
* @since 2023/7/27 11:50
*/
@ApiModel("转交审批任务的入参模型")
@Data
public class BpmnTaskAssigneeDTO {
@ApiModelProperty(value = "审批任务 ID")
@NotBlank(message = "任务 ID 不能为空")
private String taskId;
@ApiModelProperty(value = "审批任务原审批人", notes = "可以为空,意义在于可以将没有指派给任何人的任务转交给其他人")
private String originUserId;
@ApiModelProperty(value = "审批任务转发给谁", notes = "可以为空,意义在于如果分配给某离职的人,可能需要置为空")
private String newUserId;
@ApiModelProperty(value = "租户 ID")
@NotBlank(message = "租户不能为空")
private String tenantId;
}

View File

@ -1,13 +1,18 @@
package cn.axzo.workflow.core.service.dto.request.task;
package cn.axzo.workflow.core.service.dto.request.bpmn.task;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
/**
* 审批任务节点的入参模型
*/
@ApiModel("审批任务节点的入参模型")
@Data
public class BpmTaskAuditDTO {
public class BpmnTaskAuditDTO {
@ApiModelProperty(value = "任务编号", required = true, example = "1024")
@NotEmpty(message = "任务编号不能为空")
@ -15,25 +20,28 @@ public class BpmTaskAuditDTO {
/**
* 审核人Id
*/
@ApiModelProperty(value = "操作人标识")
@NotBlank(message = "操作人编号不能为空")
private String userId;
/**
* 审核人名称
* */
@ApiModelProperty(value = "操作人姓名")
@NotBlank(message = "操作人姓名不能为空")
private String userName;
/**
* 租户Id
* */
@ApiModelProperty(value = "租户")
@NotBlank(message = "租户不能为空")
private String tenantId;
/**
* 评论信息
* */
@NotBlank(message = "审核意见不能为空")
@ApiModelProperty(value = "审批意见")
private String comment;
}

View File

@ -1,18 +1,20 @@
package cn.axzo.workflow.core.service.dto.request.task;
package cn.axzo.workflow.core.service.dto.request.bpmn.task;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 添加评论
* 对审批任务添加评论的入参模型
*
* @author wangli
* @sine 2023/7/29 17:25
* @since 2023/7/29 17:25
*/
@ApiModel("对审批任务添加评论的入参模型")
@Data
public class BpmTaskCommentDTO {
public class BpmnTaskCommentDTO {
@ApiModelProperty(value = "审批任务 ID")
@NotBlank(message = "任务 ID 不能为空")

View File

@ -1,6 +1,7 @@
package cn.axzo.workflow.core.service.dto.request.task;
package cn.axzo.workflow.core.service.dto.request.bpmn.task;
import cn.axzo.workflow.core.service.dto.request.BpmPageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -9,12 +10,16 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* "待我审核"的审批任务列表查询入参模型
*/
@ApiModel("'待我审核'的审批任务列表查询入参模型")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmTaskTodoPageSearchDTO extends BpmPageParam {
public class BpmnTaskTodoPageSearchDTO extends BpmPageParam {
@ApiModelProperty(value = "用户ID唯一标识", example = "1")
@ApiModelProperty(value = "操作人标识")
private String userId;
@ApiModelProperty(value = "租户Id", example = "1")

View File

@ -1,4 +1,4 @@
package cn.axzo.workflow.core.service.dto.request.model;
package cn.axzo.workflow.core.service.dto.request.category;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -7,7 +7,7 @@ import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
@Data
public class BpmCategoryCreateDTO {
public class CategoryCreateDTO {
@ApiModelProperty(value = "字典标签", example = "新业务")
@Length(max = 50, message = "字典标签最长只支持255个字符")
@ -33,6 +33,7 @@ public class BpmCategoryCreateDTO {
private Boolean status;
@ApiModelProperty(value = "租户", example = "1")
@NotBlank(message = "租户不能为空")
private String tenantId;
}

View File

@ -1,13 +1,20 @@
package cn.axzo.workflow.core.service.dto.request.model;
package cn.axzo.workflow.core.service.dto.request.category;
import cn.axzo.framework.domain.page.PageQO;
import cn.axzo.workflow.core.service.dto.request.BpmPageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
/**
* 自定义分类的查询入参模型
*/
@ApiModel("自定义分类的查询入参模型")
@EqualsAndHashCode(callSuper = true)
@Data
public class BpmCategoryDTO extends PageQO {
public class CategorySearchDTO extends BpmPageParam {
@ApiModelProperty(value = "字典类型", example = "dict_group", notes = "精准匹配")
private String dictType;
@ -21,5 +28,6 @@ public class BpmCategoryDTO extends PageQO {
private Integer status;
@ApiModelProperty(value = "租户 ID", example = "1")
@NotBlank(message = "租户不能为空")
private String tenantId;
}

View File

@ -1,14 +1,19 @@
package cn.axzo.workflow.core.service.dto.request.model;
package cn.axzo.workflow.core.service.dto.request.category;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* 自定义分类更新模型
*/
@ApiModel("自定义分类更新模型")
@EqualsAndHashCode(callSuper = true)
@Data
public class BpmCategoryUpdateDTO extends BpmCategoryCreateDTO{
public class CategoryUpdateDTO extends CategoryCreateDTO {
@ApiModelProperty(value = "ID", example = "1")
@NotNull(message = "字典标签表示不能为空")

View File

@ -1,16 +1,16 @@
package cn.axzo.workflow.core.service.dto.request.form;
package cn.axzo.workflow.core.service.dto.request.form.definition;
import cn.axzo.workflow.core.service.dto.request.form.model.FormFieldsDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.flowable.form.model.SimpleFormModel;
import java.util.List;
/**
* TODO
* 特殊的模型,对应 Flowable Engine 中的 {@link SimpleFormModel}
*
* @author wangli
* @sine 2023/7/24 22:36
* @since 2023/7/24 22:36
*/
@Data
public class FormDefinitionDTO {

View File

@ -1,17 +1,18 @@
package cn.axzo.workflow.core.service.dto.request.form.definition;
import cn.axzo.workflow.core.service.dto.request.form.FormDefinitionDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* TODO
* 表单定义的更新入参模型
*
* @author wangli
* @since 2023/7/25 14:21
*/
@ApiModel("表单定义的更新入参模型")
@Data
public class FormDefinitionUpdateDTO {

View File

@ -1,18 +1,20 @@
package cn.axzo.workflow.core.service.dto.request.form.model;
package cn.axzo.workflow.core.service.dto.request.form.definition;
/**
* 表单中的字段相关属性模型
*
* @author wangli
* @since 2023/7/20 10:39
*/
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Map;
/**
* 表单定义中的字段相关属性入参模型
*
* @author wangli
* @since 2023/7/20 10:39
*/
@ApiModel("表单定义中的字段相关属性入参模型")
@Data
public class FormFieldsDTO {
@ -20,6 +22,7 @@ public class FormFieldsDTO {
@NotBlank(message = "字段类型不能为空")
private transient String fieldType = "FormField";
@ApiModelProperty(value = "前端的组件类型")
private String type;
@ApiModelProperty(value = "表单字段组件ID", example = "account")
@ -44,3 +47,5 @@ public class FormFieldsDTO {
@ApiModelProperty(value = "该表单字段的其他扩展属性,期望 JSON 格式")
private Map<String, Object> params;
}

View File

@ -1,5 +1,6 @@
package cn.axzo.workflow.core.service.dto.request.form;
package cn.axzo.workflow.core.service.dto.request.form.instance;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -7,11 +8,12 @@ import javax.validation.constraints.NotBlank;
import java.util.Map;
/**
* 表单字段值更新入参模型
* 表单实例填写内容更新入参模型
*
* @author wangli
* @since 2023/7/20 17:51
*/
@ApiModel("表单实例填写内容更新入参模型")
@Data
public class FormContentUpdateDTO {
@ -26,7 +28,7 @@ public class FormContentUpdateDTO {
@ApiModelProperty(value = "表单字段值", example = "{'field1': '1', 'field2': 2}")
private Map<String, Object> formVariables;
@ApiModelProperty(value = "任务归属人", example = "1")
@ApiModelProperty(value = "任务归属人标识", example = "1")
@NotBlank(message = "任务归属人不能为空")
private String userId;
}

View File

@ -1,5 +1,6 @@
package cn.axzo.workflow.core.service.dto.request.form.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@ -12,6 +13,7 @@ import javax.validation.constraints.NotBlank;
* @author wangli
* @since 2023/7/20 09:52
*/
@ApiModel("表单模型创建入参模型")
@Data
public class FormModelCreateDTO {

View File

@ -1,15 +1,17 @@
package cn.axzo.workflow.core.service.dto.request.form.model;
import cn.axzo.workflow.core.service.dto.request.BpmPageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* TODO
* 表单模型查询的入参模型
*
* @author wangli
* @since 2023/7/20 14:39
*/
@ApiModel("表单模型查询的入参模型")
@Data
public class FormModelSearchDTO extends BpmPageParam {

View File

@ -1,16 +1,18 @@
package cn.axzo.workflow.core.service.dto.request.form.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* TODO
* 表单模型更新的入参模型
*
* @author wangli
* @since 2023/7/20 13:44
*/
@ApiModel("表单模型更新的入参模型")
@Data
public class FormModelUpdateDTO extends FormModelCreateDTO {
@ -18,6 +20,4 @@ public class FormModelUpdateDTO extends FormModelCreateDTO {
@NotBlank(message = "表单 ID 不能为空")
public String formModelId;
// @ApiModelProperty(value = "表单定义内容", hidden = true)
// private FormDefinitionDTO formDefinition;
}

View File

@ -1,34 +0,0 @@
package cn.axzo.workflow.core.service.dto.request.model;
import cn.axzo.workflow.core.service.dto.request.BpmPageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class BpmModelSearchDTO extends BpmPageParam {
/**
* 标识
*/
@ApiModelProperty(value = "标识", example = "process1641042089407", notes = "精准匹配")
private String key;
/**
* 名称
*/
@ApiModelProperty(value = "名字", example = "芋道", notes = "模糊匹配")
private String name;
/**
* 流程分类
*/
@ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1")
private String category;
/**
* 工作台ID
*/
@ApiModelProperty(value = "工作台ID", example = "1", notes = "可能是单位ID,也可能项目工作台ID")
private String tenantId;
}

View File

@ -1,16 +0,0 @@
package cn.axzo.workflow.core.service.dto.request.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 修改流程模型的 DTO
*/
@Data
public class BpmModelUpdateDTO extends BpmModelCreateDTO {
@ApiModelProperty(value = "流程模型 ID", required = true)
private String processModelId;
}

View File

@ -1,26 +0,0 @@
package cn.axzo.workflow.core.service.dto.request.task;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* TODO
*
* @author wangli
* @since 2023/7/27 11:50
*/
@Data
public class BpmTaskAssigneeDTO {
@ApiModelProperty(value = "审批任务 ID")
private String taskId;
@ApiModelProperty(value = "审批任务原审批人")
private String originUserId;
@ApiModelProperty(value = "审批任务转发给谁")
private String newUserId;
@ApiModelProperty(value = "租户 ID")
private String tenantId;
}

View File

@ -0,0 +1,55 @@
package cn.axzo.workflow.core.service.dto.response.bpmn.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 基础的流程模型响应模型
*/
@ApiModel("基础的流程模型响应模型")
@Data
@NoArgsConstructor
public class BpmnModelBaseVO {
@ApiModelProperty(value = "模型 ID")
private String id;
/**
* 流程标识
*/
@ApiModelProperty(value = "模型标识")
private String key;
/**
* 流程名称
*/
@ApiModelProperty(value = "模型名称")
private String name;
/**
* 自定义分类
*/
@ApiModelProperty(value = "自定义分类")
private String category;
@ApiModelProperty(value = "创建时间")
private Date createAt;
@ApiModelProperty(value = "更新时间")
private Date updateAt;
/**
* 版本
*/
@ApiModelProperty(value = "版本", required = true, example = "1")
private Integer version;
/**
* 租户Id
*/
@ApiModelProperty(value = "租户")
private String tenantId;
}

View File

@ -0,0 +1,25 @@
package cn.axzo.workflow.core.service.dto.response.bpmn.model;
import cn.axzo.workflow.core.service.dto.request.bpmn.BpmnJsonNode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
* 流程模型的详情响应模型
*/
@ApiModel("流程模型的详情响应模型")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmnModelDetailVO extends BpmnModelBaseVO {
/**
* 流程的 Json 结构
*/
@ApiModelProperty(value = "流程的 Json 结构")
private BpmnJsonNode bpmJson;
}

View File

@ -1,4 +1,4 @@
package cn.axzo.workflow.core.service.dto.response.process;
package cn.axzo.workflow.core.service.dto.response.bpmn.process;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -7,9 +7,9 @@ import org.flowable.common.engine.impl.db.SuspensionState;
import javax.validation.constraints.NotEmpty;
@ApiModel("管理后台 - 流程定义 Response VO")
@ApiModel("流程定义响应模型")
@Data
public class BpmProcessDefinitionVO {
public class BpmnProcessDefinitionVO {
@ApiModelProperty(value = "编号", required = true, example = "1024")
private String id;

View File

@ -1,4 +1,4 @@
package cn.axzo.workflow.core.service.dto.response.process;
package cn.axzo.workflow.core.service.dto.response.bpmn.process;
import cn.axzo.workflow.core.common.enums.BpmProcessInstanceResultEnum;
import io.swagger.annotations.ApiModel;
@ -7,9 +7,9 @@ import lombok.Data;
import java.util.Date;
@ApiModel("管理后台 - 流程实例的分页 Item Response VO")
@ApiModel("流程实例的分页响应模型")
@Data
public class BpmProcessInstancePageItemVO {
public class BpmnProcessInstancePageItemVO {
@ApiModelProperty(value = "原流程实例的编号", required = true, example = "1024")
private String id;
@ -23,7 +23,7 @@ public class BpmProcessInstancePageItemVO {
@ApiModelProperty(value = "流程分类", required = true, notes = "参见 bpm_model_category 数据字典", example = "1")
private String category;
@ApiModelProperty(value = "流程实例的结果", required = true, notes = "参见 bpm_process_instance_result", example = "2")
@ApiModelProperty(value = "审核状态(PROCESSING:审核中,APPROVED:已通过,REJECTED:已拒绝,CANCELLED:已取消)", example = "APPROVED")
private BpmProcessInstanceResultEnum result;
@ApiModelProperty(value = "提交时间", required = true)

View File

@ -1,15 +1,20 @@
package cn.axzo.workflow.core.service.dto.response.process;
package cn.axzo.workflow.core.service.dto.response.bpmn.process;
import cn.axzo.workflow.core.common.enums.BpmProcessInstanceResultEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* 流程实例详情响应模型
*/
@ApiModel("流程实例详情响应模型")
@Data
public class BpmProcessInstanceVO {
public class BpmnProcessInstanceVO {
@ApiModelProperty(value = "流程实例的编号", example = "1024")
private String id;
@ -20,7 +25,7 @@ public class BpmProcessInstanceVO {
@ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1")
private String category;
@ApiModelProperty(value = "流程实例的结果", notes = "参见 BpmProcessInstanceResultEnum", example = "2")
@ApiModelProperty(value = "审核状态(PROCESSING:审核中,APPROVED:已通过,REJECTED:已拒绝,CANCELLED:已取消)", example = "APPROVED")
private BpmProcessInstanceResultEnum result;
@ApiModelProperty(value = "提交时间")
@ -35,7 +40,7 @@ public class BpmProcessInstanceVO {
@ApiModelProperty(value = "流程变量")
private Map<String, Object> variables;
@ApiModelProperty("发起人ID")
@ApiModelProperty("发起人标识")
private String startUserId;
}

View File

@ -0,0 +1,41 @@
package cn.axzo.workflow.core.service.dto.response.bpmn.task;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 运行中的任务实例响应模型
*
* @author wangli
* @since 2023/7/29 23:24
*/
@ApiModel("运行中的任务实例响应模型")
@Data
public class BpmTaskInstanceVO {
@ApiModelProperty(value = "任务关联的流程实例 ID")
private String processInstanceId;
@ApiModelProperty(value = "任务关联的流程定义 ID")
private String processDefinitionId;
@ApiModelProperty(value = "任务实例 ID")
private String taskId;
@ApiModelProperty(value = "任务定义 KEY")
private String taskDefinitionKey;
@ApiModelProperty(value = "任务名称")
private String name;
@ApiModelProperty(value = "任务归属人")
private String owner;
@ApiModelProperty(value = "任务审批人")
private String assignee;
@ApiModelProperty(value = "任务创建时间")
private Date createTime;
@ApiModelProperty(value = "租户")
private String tenantId;
@ApiModelProperty(value = "任务关联的表单 KEY")
private String formKey;
@ApiModelProperty(value = "自定义分类")
private String category;
}

View File

@ -1,4 +1,4 @@
package cn.axzo.workflow.core.service.dto.response.task;
package cn.axzo.workflow.core.service.dto.response.bpmn.task;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -7,7 +7,7 @@ import lombok.Data;
import java.util.Date;
@Data
@ApiModel("管理后台 - 流程任务的 Running 进行中的分页项 Response VO")
@ApiModel("待我审批的任务列表响应模型")
public class BpmTaskTodoPageItemVO {
@ApiModelProperty(value = "任务编号", required = true, example = "1024")

View File

@ -0,0 +1,28 @@
package cn.axzo.workflow.core.service.dto.response.bpmn.task;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 历史审批任务分组响应模型
*
* @author wangli
* @since 2023/7/29 22:59
*/
@ApiModel("历史审批任务分组响应模型")
@Data
public class BpmnHistoricTaskInstanceGroupVO {
@ApiModelProperty(value = "审批任务定义KEY")
private String taskDefinitionKey;
@ApiModelProperty(value = "流程实例 ID")
private String processInstanceId;
@ApiModelProperty(value = "该审批节点下的所有任务")
private List<BpmnHistoricTaskInstanceVO> tasks;
}

View File

@ -0,0 +1,59 @@
package cn.axzo.workflow.core.service.dto.response.bpmn.task;
import cn.axzo.workflow.core.common.enums.BpmProcessInstanceResultEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 历史任务实例响应模型
*
* @author wangli
* @since 2023/7/29 17:57
*/
@ApiModel("历史任务实例响应模型")
@Data
public class BpmnHistoricTaskInstanceVO {
@ApiModelProperty(value = "任务实例 ID")
private String taskId;
@ApiModelProperty(value = "任务定义 KEY")
private String taskDefinitionKey;
@ApiModelProperty(value = "任务名称")
private String name;
@ApiModelProperty(value = "任务关联的实例 ID")
private String processInstanceId;
@ApiModelProperty(value = "任务关联的定义 ID")
private String processDefinitionId;
@ApiModelProperty(value = "任务的审批人")
private String assignee;
@ApiModelProperty(value = "任务创建时间")
private Date createTime;
@ApiModelProperty(value = "任务结束时间")
private Date endTime;
@ApiModelProperty(value = "任务持续毫秒数")
private Long durationInMillis;
@ApiModelProperty(value = "租户")
private String tenantId;
@ApiModelProperty(value = "审核状态(PROCESSING:审核中,APPROVED:已通过,REJECTED:已拒绝,CANCELLED:已取消)", example = "APPROVED")
private BpmProcessInstanceResultEnum result;
@ApiModelProperty(value = "任务审批意见")
private String comment;
@ApiModelProperty(value = "删除原因")
private transient String deleteReason;
}

View File

@ -1,4 +1,4 @@
package cn.axzo.workflow.core.service.dto.response.task;
package cn.axzo.workflow.core.service.dto.response.bpmn.task;
import cn.axzo.workflow.core.common.enums.BpmProcessInstanceResultEnum;
import io.swagger.annotations.ApiModel;
@ -9,11 +9,11 @@ import lombok.ToString;
import java.util.Date;
@ApiModel("管理后台 - 流程任务的 Done 已完成的分页项 Response VO")
@ApiModel("我已完成的任务列表响应模型")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmTaskDonePageItemVO extends BpmTaskTodoPageItemVO {
public class BpmnTaskDonePageItemVO extends BpmTaskTodoPageItemVO {
@ApiModelProperty(value = "审批任务结束时间", required = true)
private Date endTime;
@ -21,7 +21,7 @@ public class BpmTaskDonePageItemVO extends BpmTaskTodoPageItemVO {
@ApiModelProperty(value = "持续时间", required = true, example = "1000")
private Long durationInMillis;
@ApiModelProperty(value = "任务结果", required = true, notes = "参见 BpmProcessInstanceResultEnum", example = "2")
@ApiModelProperty(value = "审核状态(PROCESSING:审核中,APPROVED:已通过,REJECTED:已拒绝,CANCELLED:已取消)", example = "APPROVED")
private BpmProcessInstanceResultEnum result;
@ApiModelProperty(value = "审批建议", required = true, example = "不请假了!")

View File

@ -1,10 +1,12 @@
package cn.axzo.workflow.core.service.dto.response.model;
package cn.axzo.workflow.core.service.dto.response.category;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("自定义分类详情响应模型")
@Data
public class BpmCategoryItemVo {
public class CategoryItemVO {
@ApiModelProperty(value = "ID")
private Long id;

View File

@ -1,28 +1,37 @@
package cn.axzo.workflow.core.service.dto.response.form.definition;
import cn.axzo.workflow.core.service.dto.request.form.model.FormFieldsDTO;
import cn.axzo.workflow.core.service.dto.request.form.definition.FormFieldsDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* TODO
* 表单定义的响应模型
*
* @author wangli
* @since 2023/7/25 14:00
*/
@ApiModel("表单定义的响应模型")
@Data
public class FormDefinitionVO {
@ApiModelProperty(value = "模型名称")
private String name;
@ApiModelProperty(value = "模型 KEY")
private String key;
@ApiModelProperty(value = "自定义分类")
private String category;
@ApiModelProperty(value = "版本")
private Integer version;
@ApiModelProperty(value = "租户")
private String tenantId;
@ApiModelProperty(value = "表单模型字段")
private List<FormFieldsDTO> fields;
}

View File

@ -1,32 +0,0 @@
package cn.axzo.workflow.core.service.dto.response.form.model;
import lombok.Data;
import java.util.Date;
/**
* TODO
*
* @author wangli
* @since 2023/7/25 11:04
*/
@Data
public class BpmModelBaseVO {
private String id;
private String name;
private String key;
private String category;
private String tenantId;
private Integer version;
private Date createAt;
private Date updateAt;
}

View File

@ -0,0 +1,43 @@
package cn.axzo.workflow.core.service.dto.response.form.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 基础的表单模型响应模型
*
* @author wangli
* @since 2023/7/25 11:04
*/
@ApiModel("基础的表单模型响应模型")
@Data
public class FormModelBaseVO {
@ApiModelProperty(value = "模型 ID")
private String id;
@ApiModelProperty(value = "模型名称")
private String name;
@ApiModelProperty(value = "模型 KEY")
private String key;
@ApiModelProperty(value = "自定义分类")
private String category;
@ApiModelProperty(value = "租户")
private String tenantId;
@ApiModelProperty(value = "版本")
private Integer version;
@ApiModelProperty(value = "创建时间")
private Date createAt;
@ApiModelProperty(value = "更新时间")
private Date updateAt;
}

View File

@ -1,45 +0,0 @@
package cn.axzo.workflow.core.service.dto.response.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@NoArgsConstructor
public class BpmModelBaseVO {
private String id;
/**
* 流程标识
*/
private String key;
/**
* 流程名称
*/
private String name;
/**
* 流程分类
* */
private String category;
@ApiModelProperty(value = "创建时间", required = true)
private Date createAt;
@ApiModelProperty(value = "最后更新时间", required = true)
private Date updateAt;
/**
* 版本
*/
@ApiModelProperty(value = "版本", required = true, example = "1")
private Integer version;
/**
* 租户Id
* */
private String tenantId;
}

View File

@ -1,21 +0,0 @@
package cn.axzo.workflow.core.service.dto.response.model;
import cn.axzo.workflow.core.service.dto.BpmJsonNode;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmModelDetailVO extends BpmModelBaseVO{
/**
* 流程的 Json 结构
*
* */
@ApiModelProperty(value = "流程的 Json 结构", required = true)
private BpmJsonNode bpmJson;
}

View File

@ -1,15 +0,0 @@
package cn.axzo.workflow.core.service.dto.response.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmProcessModelVO extends BpmModelBaseVO {
@ApiModelProperty(value = "流程定义ID")
private String processDefinitionId;
}

View File

@ -1,24 +0,0 @@
package cn.axzo.workflow.core.service.dto.response.process;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.Date;
@ApiModel("管理后台 - 流程定义的分页的每一项 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmProcessDefinitionPageItemRespVO extends BpmProcessDefinitionVO {
@ApiModelProperty(value = "表单名字", example = "请假表单")
private String formName;
@ApiModelProperty(value = "部署时间", required = true)
private Date deploymentTime;
}

View File

@ -1,22 +0,0 @@
package cn.axzo.workflow.core.service.dto.response.task;
import lombok.Data;
import java.util.List;
/**
* 审批任务分组响应模型
*
* @author wangli
* @sine 2023/7/29 22:59
*/
@Data
public class BpmHistoricTaskInstanceGroupVO {
private String taskDefinitionKey;
private String processInstanceId;
private List<BpmHistoricTaskInstanceVO> tasks;
}

View File

@ -1,44 +0,0 @@
package cn.axzo.workflow.core.service.dto.response.task;
import cn.axzo.workflow.core.common.enums.BpmProcessInstanceResultEnum;
import lombok.Data;
import java.util.Date;
/**
* 历史任务实例响应模型
*
* @author wangli
* @sine 2023/7/29 17:57
*/
//@ApiModel("管理后台 - 流程任务的 Done 已完成的分页项 Response VO")
@Data
public class BpmHistoricTaskInstanceVO {
private String taskId;
private String taskDefinitionKey;
private String name;
private String processInstanceId;
private String processDefinitionId;
private String assignee;
private Date createTime;
private Date endTime;
private Long durationInMillis;
private String tenantId;
private BpmProcessInstanceResultEnum result;
private String comment;
private transient String deleteReason;
}

View File

@ -2,7 +2,7 @@ package cn.axzo.workflow.core.service.engine;
import cn.axzo.workflow.core.deletage.BpmTaskDelegate;
import cn.axzo.workflow.core.listener.BpmTaskEventListener;
import cn.axzo.workflow.core.service.impl.BpmTaskServiceImpl;
import cn.axzo.workflow.core.service.impl.BpmnTaskServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
@ -23,7 +23,7 @@ public class EngineTaskEventListener implements TaskListener {
private BpmTaskDelegate taskDelegate;
@Resource
@Lazy // 解决循环依赖
private BpmTaskServiceImpl taskService;
private BpmnTaskServiceImpl taskService;
@Override
public void notify(DelegateTask delegateTask) {

View File

@ -14,7 +14,7 @@ import org.flowable.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFacto
* 主要解决多实例如果设置了自动跳过功能, 在历史数据中可以看到被跳过的任务. Flowable 默认的行为不存历史表.
*
* @author wangli
* @sine 2023/7/29 00:34
* @since 2023/7/29 00:34
*/
public class CustomActivityBehaviorFactory extends DefaultActivityBehaviorFactory {
@Override

View File

@ -18,7 +18,7 @@ import java.util.Iterator;
* 主要用来解决多实例自动跳过时,历史的任务实例表中没有该节点的信息
*
* @author wangli
* @sine 2023/7/29 00:25
* @since 2023/7/29 00:25
*/
public class CustomParallelMultiInstanceActivityBehavior extends ParallelMultiInstanceBehavior {
public CustomParallelMultiInstanceActivityBehavior(Activity activity,

View File

@ -18,7 +18,7 @@ import java.util.Iterator;
* 主要用来解决多实例自动跳过时,历史的任务实例表中没有该节点的信息
*
* @author wangli
* @sine 2023/7/29 15:27
* @since 2023/7/29 15:27
*/
public class CustomSequentialMultiInstanceBehavior extends SequentialMultiInstanceBehavior {
public CustomSequentialMultiInstanceBehavior(Activity activity,

View File

@ -34,7 +34,7 @@ import java.util.List;
* TODO
*
* @author wangli
* @sine 2023/7/29 01:11
* @since 2023/7/29 01:11
*/
public class CustomUserTaskActivityBehavior extends UserTaskActivityBehavior {
public CustomUserTaskActivityBehavior(UserTask userTask) {

View File

@ -2,12 +2,12 @@ package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.common.utils.BpmTransformUtil;
import cn.axzo.workflow.core.service.BpmProcessDefinitionService;
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
import cn.axzo.workflow.core.service.converter.BpmProcessDefinitionConverter;
import cn.axzo.workflow.core.service.dto.request.definition.BpmProcessDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.process.BpmProcessDefinitionPageDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.definition.BpmnProcessDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessDefinitionPageDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessDefinitionVO;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
@ -32,7 +32,7 @@ import static java.util.Collections.emptyList;
@Service
@Slf4j
public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionService {
public class BpmnProcessDefinitionServiceImpl implements BpmnProcessDefinitionService {
@Resource
@ -92,7 +92,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
}
@Override
public void updateProcessDefinition(BpmProcessDefinitionUpdateDTO dto) {
public void updateProcessDefinition(BpmnProcessDefinitionUpdateDTO dto) {
Model model = repositoryService.getModel(dto.getProcessModelId());
if (Objects.isNull(model)) {
throw new WorkflowEngineException("模型不存在");
@ -120,7 +120,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
}
@Override
public BpmPageResult<BpmProcessDefinitionVO> getProcessDefinitionPage(BpmProcessDefinitionPageDTO dto) {
public BpmPageResult<BpmnProcessDefinitionVO> getProcessDefinitionPage(BpmnProcessDefinitionPageDTO dto) {
ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(dto.getKey());
if (StrUtil.isNotBlank(dto.getTenantId())) {
@ -139,7 +139,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
}
@Override
public BpmProcessDefinitionVO getProcessDefinition(String id) {
public BpmnProcessDefinitionVO getProcessDefinition(String id) {
ProcessDefinition processDefinition = repositoryService.getProcessDefinition(id);
if (Objects.isNull(processDefinition)) {
throw new WorkflowEngineException(PROCESS_DEFINITION_ID_NOT_EXISTS, id);
@ -159,7 +159,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
}
@Override
public BpmProcessDefinitionVO getActiveProcessDefinitionByKey(String key) {
public BpmnProcessDefinitionVO getActiveProcessDefinitionByKey(String key) {
ProcessDefinition processDefinition =
repositoryService.createProcessDefinitionQuery().processDefinitionKey(key).latestVersion()
.singleResult();

View File

@ -4,15 +4,15 @@ import cn.axzo.workflow.core.common.enums.BpmProcessInstanceDeleteReasonEnum;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.common.utils.BpmCollectionUtils;
import cn.axzo.workflow.core.repository.mapper.InfoMapper;
import cn.axzo.workflow.core.service.BpmProcessDefinitionService;
import cn.axzo.workflow.core.service.BpmProcessInstanceService;
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
import cn.axzo.workflow.core.service.converter.BpmHistoricProcessInstanceConverter;
import cn.axzo.workflow.core.service.converter.BpmProcessInstancePageItemConverter;
import cn.axzo.workflow.core.service.dto.request.process.*;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.*;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionVO;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessInstancePageItemVO;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessInstanceVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessDefinitionVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstancePageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstanceVO;
import cn.azxo.framework.common.utils.StringUtils;
import cn.hutool.core.lang.Assert;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -47,7 +47,7 @@ import static cn.axzo.workflow.core.common.enums.BpmErrorCode.*;
@Service
@Slf4j
public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService {
public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceService {
@Autowired
private TaskService engineTaskService;
@ -57,9 +57,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
private RuntimeService runtimeService;
@Autowired
@Lazy // 解决循环依赖
private BpmTaskServiceImpl taskService;
private BpmnTaskServiceImpl taskService;
@Autowired
private BpmProcessDefinitionService processDefinitionService;
private BpmnProcessDefinitionService processDefinitionService;
@Autowired
private HistoryService historyService;
@Resource
@ -88,7 +88,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
}
@Override
public BpmPageResult<BpmProcessInstancePageItemVO> getMyProcessInstancePage(@Valid BpmProcessInstanceMyPageReqVO dto) {
public BpmPageResult<BpmnProcessInstancePageItemVO> getMyProcessInstancePage(@Valid BpmnProcessInstanceMyPageReqVO dto) {
HistoricProcessInstanceQuery query =
historyService.createHistoricProcessInstanceQuery().processInstanceTenantId(dto.getTenantId());
if (StringUtils.isNotBlank(dto.getName())) {
@ -122,9 +122,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
return BpmPageResult.empty();
}
List<BpmProcessInstancePageItemVO> vos = new ArrayList<>();
List<BpmnProcessInstancePageItemVO> vos = new ArrayList<>();
instances.forEach(i -> {
BpmProcessInstancePageItemVO vo = instancePageItemConverter.toVo(i);
BpmnProcessInstancePageItemVO vo = instancePageItemConverter.toVo(i);
// 暂不对外提供发起人姓名
// List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery()
// .processInstanceId(i.getId()).variableName(INTERNAL_START_USER_NAME).list();
@ -172,8 +172,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
@Override
public String createProcessInstance(BpmProcessInstanceCreateDTO dto) {
BpmProcessDefinitionVO definition =
public String createProcessInstance(BpmnProcessInstanceCreateDTO dto) {
BpmnProcessDefinitionVO definition =
processDefinitionService.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
// 校验流程定义
if (definition == null) {
@ -199,25 +199,12 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
.name(name)
.tenantId(dto.getTenantId())
.start();
// BpmProcessInstanceExtDO extDO = new BpmProcessInstanceExtDO();
// extDO.setProcessInstanceId(instance.getId());
// extDO.setName(name);
// extDO.setTenantId(dto.getTenantId());
// // extDO.setStartCompanyId(dto.getCompanyId());
// extDO.setStartUserId(dto.getUserId());
// extDO.setStartUserName(dto.getUserName());
// extDO.setFormVariables(dto.getVariables());
// extDO.setExt(dto.getExt());
// // 补全流程实例的拓展表
// processInstanceExtMapper.updateByProcessInstanceId(extDO);
// runtimeService.updateBusinessStatus(instance.getProcessInstanceId(), PROCESSING.getStatus());
return instance.getProcessInstanceId();
}
@Override
public String createProcessInstanceWithForm(BpmProcessInstanceCreateWithFormDTO dto) {
BpmProcessDefinitionVO definition =
public String createProcessInstanceWithForm(BpmnProcessInstanceCreateWithFormDTO dto) {
BpmnProcessDefinitionVO definition =
processDefinitionService.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey());
// 校验流程定义
if (definition == null) {
@ -258,7 +245,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
}
@Override
public Boolean cancelProcessInstance(BpmProcessInstanceCancelDTO dto) {
public Boolean cancelProcessInstance(BpmnProcessInstanceCancelDTO dto) {
HistoricProcessInstance instance = null;
if (StringUtils.isNotBlank(dto.getId())) {
instance = getProcessInstance(dto.getId(), dto.getTenantId(), false);
@ -305,7 +292,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
}
@Override
public BpmProcessInstanceVO getProcessInstanceVO(BpmProcessInstanceQueryDTO dto) {
public BpmnProcessInstanceVO getProcessInstanceVO(BpmnProcessInstanceQueryDTO dto) {
HistoricProcessInstance processInstance = null;
if (StringUtils.isNotBlank(dto.getProcessInstanceId())) {
processInstance = getProcessInstance(dto.getProcessInstanceId(), dto.getTenantId(), dto.getHasVariable());
@ -323,7 +310,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
// Assert.notNull(processInstanceExt, "流程实例拓展({}) 不存在", processInstance.getId());
// 获得流程定义
BpmProcessDefinitionVO processDefinition = processDefinitionService
BpmnProcessDefinitionVO processDefinition = processDefinitionService
.getProcessDefinition(processInstance.getProcessDefinitionId());
Assert.notNull(processDefinition, "流程定义({}) 不存在", processInstance.getProcessDefinitionId());

View File

@ -2,16 +2,16 @@ package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.common.utils.BpmTransformUtil;
import cn.axzo.workflow.core.service.BpmProcessDefinitionService;
import cn.axzo.workflow.core.service.BpmProcessModelService;
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
import cn.axzo.workflow.core.service.BpmnProcessModelService;
import cn.axzo.workflow.core.service.converter.BpmModelConverter;
import cn.axzo.workflow.core.service.converter.FormModelConverter;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelCreateDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelSearchDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelCreateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelSearchDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelUpdateDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.form.model.BpmModelBaseVO;
import cn.axzo.workflow.core.service.dto.response.model.BpmModelDetailVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.model.BpmnModelDetailVO;
import cn.axzo.workflow.core.service.dto.response.form.model.FormModelBaseVO;
import org.flowable.common.engine.impl.db.SuspensionState;
import org.flowable.engine.ManagementService;
import org.flowable.engine.RepositoryService;
@ -31,24 +31,24 @@ import java.util.Objects;
import static cn.axzo.workflow.core.common.BpmConstants.MODEL_META_INFO_PROCESS;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.*;
import static cn.axzo.workflow.core.service.impl.BpmFormModelServiceImpl.countSql;
import static cn.axzo.workflow.core.service.impl.BpmFormModelServiceImpl.sqlConnectors;
import static cn.axzo.workflow.core.service.impl.FormModelServiceImpl.countSql;
import static cn.axzo.workflow.core.service.impl.FormModelServiceImpl.sqlConnectors;
@Service
public class BpmProcessModelServiceImpl implements BpmProcessModelService {
public class BpmnProcessModelServiceImpl implements BpmnProcessModelService {
@Resource
@Lazy
private RepositoryService repositoryService;
@Resource
private BpmProcessDefinitionService processDefinitionService;
private BpmnProcessDefinitionService processDefinitionService;
@Resource
private ManagementService managementService;
@Resource
private FormModelConverter formModelConverter;
@Override
public BpmPageResult<BpmModelBaseVO> getModelPage(BpmModelSearchDTO dto) {
public BpmPageResult<FormModelBaseVO> getModelPage(BpmnModelSearchDTO dto) {
String tableName = managementService.getTableName(Model.class);
StringBuilder baseQuerySql = new StringBuilder("SELECT * FROM ")
.append(tableName);
@ -88,7 +88,7 @@ public class BpmProcessModelServiceImpl implements BpmProcessModelService {
}
@Override
public String createBpmModel(@Valid BpmModelCreateDTO dto) {
public String createBpmModel(@Valid BpmnModelCreateDTO dto) {
Model existModel = repositoryService.createModelQuery()
.modelKey(dto.getKey())
.modelTenantId(dto.getTenantId())
@ -131,7 +131,7 @@ public class BpmProcessModelServiceImpl implements BpmProcessModelService {
* 获取模型
*/
@Override
public BpmModelDetailVO getById(String processModelId, @Nullable String tenantId) {
public BpmnModelDetailVO getById(String processModelId, @Nullable String tenantId) {
Model model = repositoryService.getModel(processModelId);
if (Objects.isNull(model) && !Objects.equals(model.getMetaInfo(), MODEL_META_INFO_PROCESS)) {
throw new WorkflowEngineException(MODEL_ID_NOT_EXISTS, processModelId);
@ -143,7 +143,7 @@ public class BpmProcessModelServiceImpl implements BpmProcessModelService {
* 获取模型
*/
@Override
public BpmModelDetailVO getByKey(String processModelKey, @Nullable String tenantId) {
public BpmnModelDetailVO getByKey(String processModelKey, @Nullable String tenantId) {
Model model = repositoryService.createModelQuery().modelKey(processModelKey).singleResult();
if (Objects.isNull(model) && !Objects.equals(model.getMetaInfo(), MODEL_META_INFO_PROCESS)) {
throw new WorkflowEngineException(MODEL_KEY_NOT_EXISTS, processModelKey);
@ -152,7 +152,7 @@ public class BpmProcessModelServiceImpl implements BpmProcessModelService {
}
@Override
public void updateBpmModel(BpmModelUpdateDTO dto) {
public void updateBpmModel(BpmnModelUpdateDTO dto) {
Model originModel = repositoryService.createModelQuery()
.modelId(dto.getProcessModelId())
.modelKey(dto.getKey())

View File

@ -1,20 +1,17 @@
package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.common.utils.BpmCollectionUtils;
import cn.axzo.workflow.core.service.BpmTaskService;
import cn.axzo.workflow.core.service.BpmnTaskService;
import cn.axzo.workflow.core.service.converter.BpmHistoricTaskInstanceConverter;
import cn.axzo.workflow.core.service.converter.BpmTaskConverter;
import cn.axzo.workflow.core.service.converter.BpmTaskDonePageItemConverter;
import cn.axzo.workflow.core.service.converter.BpmTaskTodoPageItemConverter;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskAssigneeDTO;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskCommentDTO;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskTodoPageSearchDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAssigneeDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskCommentDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskTodoPageSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.task.BpmHistoricTaskInstanceGroupVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmHistoricTaskInstanceVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskDonePageItemVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskTodoPageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
@ -49,7 +46,7 @@ import static cn.axzo.workflow.core.common.utils.BpmCollectionUtils.convertSet;
@Service
@Slf4j
public class BpmTaskServiceImpl implements BpmTaskService {
public class BpmnTaskServiceImpl implements BpmnTaskService {
@Resource
private TaskService taskService;
@ -60,20 +57,22 @@ public class BpmTaskServiceImpl implements BpmTaskService {
@Resource
private RepositoryService repositoryService;
@Resource
private BpmProcessInstanceServiceImpl processInstanceService;
private BpmnProcessInstanceServiceImpl processInstanceService;
@Resource
private BpmTaskTodoPageItemConverter todoPageItemConverter;
@Resource
private BpmTaskDonePageItemConverter donePageItemConverter;
@Resource
private BpmHistoricTaskInstanceConverter historicTaskInstanceConverter;
@Resource
private BpmTaskConverter bpmTaskConverter;
// @Resource
// private BpmTaskExtMapper taskExtMapper;
// @Resource
// private BpmProcessInstanceExtMapper bpmProcessInstanceExtMapper;
@Override
public BpmPageResult<BpmTaskTodoPageItemVO> getTodoTaskPage(BpmTaskTodoPageSearchDTO dto) {
public BpmPageResult<BpmTaskTodoPageItemVO> getTodoTaskPage(BpmnTaskTodoPageSearchDTO dto) {
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery()
.unfinished()
.taskAssignee(dto.getUserId()) // 分配给自己
@ -109,7 +108,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
}
@Override
public BpmPageResult<BpmTaskDonePageItemVO> getDoneTaskPage(BpmTaskTodoPageSearchDTO dto) {
public BpmPageResult<BpmnTaskDonePageItemVO> getDoneTaskPage(BpmnTaskTodoPageSearchDTO dto) {
// 查询已办任务
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery()
.finished() // 已完成
@ -146,12 +145,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
Map<String, HistoricProcessInstance> historicProcessInstanceMap =
processInstanceService.getHistoricProcessInstanceMap(
processInstanceIds);
List<BpmTaskDonePageItemVO> vos = donePageItemConverter.toVos(tasks, historicProcessInstanceMap);
List<BpmnTaskDonePageItemVO> vos = donePageItemConverter.toVos(tasks, historicProcessInstanceMap);
return new BpmPageResult<>(vos, query.count());
}
@Override
public void approveTask(BpmTaskAuditDTO dto) {
public void approveTask(BpmnTaskAuditDTO dto) {
// 校验任务存在
Task task = checkTask(dto.getTenantId(), dto.getUserId(), dto.getTaskId());
// 校验流程实例存在
@ -161,47 +160,17 @@ public class BpmTaskServiceImpl implements BpmTaskService {
throw new WorkflowEngineException(PROCESS_INSTANCE_NOT_EXISTS);
}
// 根据流程实例ID和任务定义key查询运行中的任务并记录taskId列表
TaskQuery taskQuery = taskService.createTaskQuery()
.processInstanceId(instance.getId())
.taskTenantId(dto.getTenantId())
.taskDefinitionKey(task.getTaskDefinitionKey());
List<Task> taskRunningListBefore = taskQuery.list();//eg123
if (taskRunningListBefore.size() > 1 && taskQuery.list().isEmpty()) {
// 满足条件1当前任务是多实例任务节点的子任务
// 满足条件2该子任务完成时将所在多实例任务节点中的其他子任务也一并删除说明此时已经满足了多实例的完成条件
// 此时需要将该任务所在多实例任务节点中的其他子任务更新任务拓展表为已完成
// for (Task taskRunningBefore : taskRunningListBefore) {
// if (!task.getId().equals(taskRunningBefore.getId())) {
// TaskExtDO taskExtDO = new TaskExtDO();
// taskExtDO.setTaskId(taskRunningBefore.getId());
// taskExtDO.setResult(BpmProcessInstanceResultEnum.APPROVE.getResult());
// taskExtDO.setComment("自动完成");
// taskExtDO.setEndTime(new Date());
// taskExtMapper.updateByTaskId(taskExtDO);
// }
// }
if (StringUtils.hasLength(dto.getComment())) {
Authentication.setAuthenticatedUserId(dto.getUserId());
taskService.addComment(dto.getTaskId(), instance.getId(), COMMENT_TYPE_ADVICE, dto.getComment());
}
// TaskExtDO taskExtDO = new TaskExtDO();
// taskExtDO.setTaskId(task.getId());
// taskExtDO.setResult(BpmProcessInstanceResultEnum.APPROVE.getResult());
// taskExtDO.setComment(dto.getComment());
// taskExtDO.setEndTime(new Date());
// // 更新任务拓展表为通过
// taskExtMapper.updateByTaskId(taskExtDO);
// Map<String, Object> transientMap = new HashMap<>();
// transientMap.put(BpmConstants.INTERNAL_TASK_COMMENT, dto.getComment());
Authentication.setAuthenticatedUserId(dto.getUserId());
taskService.addComment(dto.getTaskId(), instance.getId(), dto.getComment());
// 完成任务审批通过
// FIXME 如果 task 被重复删除会抛出异常
taskService.complete(task.getId(), instance.getProcessVariables());
}
@Override
public void rejectTask(BpmTaskAuditDTO dto) {
public void rejectTask(BpmnTaskAuditDTO dto) {
// 校验任务存在
Task task = checkTask(dto.getTenantId(),
dto.getUserId(), dto.getTaskId());
@ -225,8 +194,8 @@ public class BpmTaskServiceImpl implements BpmTaskService {
}
@Override
public List<BpmHistoricTaskInstanceVO> getHistoricTaskListByProcessInstanceId(String processInstanceId,
String tenantId) {
public List<BpmnHistoricTaskInstanceVO> getHistoricTaskListByProcessInstanceId(String processInstanceId,
String tenantId) {
HistoricTaskInstanceQuery query =
historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId);
if (StringUtils.hasLength(tenantId)) {
@ -242,16 +211,13 @@ public class BpmTaskServiceImpl implements BpmTaskService {
List<HistoricTaskInstance> taskInstances = query.orderByHistoricTaskInstanceStartTime()
.desc() // 创建时间倒序
.list();
// Map<String, List<HistoricTaskInstance>> taskMapByDefKey =
// taskInstances.stream().collect(Collectors.groupingBy
// (HistoricTaskInstance::getTaskDefinitionKey));
List<BpmHistoricTaskInstanceVO> vos = historicTaskInstanceConverter.toVosSkipMiEnd(taskInstances);
List<BpmnHistoricTaskInstanceVO> vos = historicTaskInstanceConverter.toVosSkipMiEnd(taskInstances);
Map<String, List<Comment>> commentByTaskIdMap = taskService.getProcessInstanceComments(processInstanceId,
CommentEntity.TYPE_COMMENT).stream().collect(Collectors.groupingBy(Comment::getTaskId));
Set<String> taskDefinitionKeys = new HashSet<>();
int count = 0;
for (BpmHistoricTaskInstanceVO vo : vos) {
for (BpmnHistoricTaskInstanceVO vo : vos) {
if (!taskDefinitionKeys.contains(vo.getTaskDefinitionKey()) && count == 0) {
vo.setResult(valueOfStatus(instance.getBusinessStatus()));
} else {
@ -267,16 +233,16 @@ public class BpmTaskServiceImpl implements BpmTaskService {
}
@Override
public List<BpmHistoricTaskInstanceGroupVO> getHistoricTaskListGroupByProcessInstanceId(String processInstanceId,
String tenantId) {
List<BpmHistoricTaskInstanceVO> vos = getHistoricTaskListByProcessInstanceId(processInstanceId, tenantId);
public List<BpmnHistoricTaskInstanceGroupVO> getHistoricTaskListGroupByProcessInstanceId(String processInstanceId,
String tenantId) {
List<BpmnHistoricTaskInstanceVO> vos = getHistoricTaskListByProcessInstanceId(processInstanceId, tenantId);
Map<String, List<BpmHistoricTaskInstanceVO>> voMapByTaskDefKey =
vos.stream().collect(Collectors.groupingBy(BpmHistoricTaskInstanceVO::getTaskDefinitionKey));
Map<String, List<BpmnHistoricTaskInstanceVO>> voMapByTaskDefKey =
vos.stream().collect(Collectors.groupingBy(BpmnHistoricTaskInstanceVO::getTaskDefinitionKey));
List<BpmHistoricTaskInstanceGroupVO> groupVos = new ArrayList<>();
for (Map.Entry<String, List<BpmHistoricTaskInstanceVO>> entry : voMapByTaskDefKey.entrySet()) {
BpmHistoricTaskInstanceGroupVO groupVO = new BpmHistoricTaskInstanceGroupVO();
List<BpmnHistoricTaskInstanceGroupVO> groupVos = new ArrayList<>();
for (Map.Entry<String, List<BpmnHistoricTaskInstanceVO>> entry : voMapByTaskDefKey.entrySet()) {
BpmnHistoricTaskInstanceGroupVO groupVO = new BpmnHistoricTaskInstanceGroupVO();
groupVO.setProcessInstanceId(processInstanceId);
groupVO.setTaskDefinitionKey(entry.getKey());
groupVO.setTasks(entry.getValue());
@ -286,11 +252,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
}
@Override
public List<Task> getActiveTasksByProcessInstanceId(String processInstanceId) {
if (StrUtil.isEmpty(processInstanceId)) {
return Collections.emptyList();
public List<BpmTaskInstanceVO> getActiveTasksByProcessInstanceId(String processInstanceId, String tenantId) {
TaskQuery query = taskService.createTaskQuery().processInstanceId(processInstanceId);
if (StringUtils.hasLength(tenantId)) {
query.taskTenantId(tenantId);
}
return taskService.createTaskQuery().processInstanceId(processInstanceId).list();
return bpmTaskConverter.toVos(query.list());
}
/**
@ -324,86 +291,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
return taskQuery.singleResult();
}
// public void createTaskExt(DelegateTask task) {
// TaskExtDO taskExtDO = BpmTaskConvert.convertTaskExt(task);
// taskExtDO.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
// taskExtMapper.insert(taskExtDO);
// }
// public void updateTaskExtComplete(DelegateTask task) {
// TaskExtDO taskExtDO = BpmTaskConvert.convertTaskExt(task);
// taskExtDO.setEndTime(new Date());
// taskExtMapper.updateByTaskId(taskExtDO);
// }
// public void updateTaskExtAssign(DelegateTask task) {
// String assignee = task.getAssignee();
// String processDefinitionId = task.getProcessDefinitionId();
// String taskDefinitionKey = task.getTaskDefinitionKey();
// // 在获取候选人列表时向bpm_task_assignee_info表中插入选择的审批人的信息在这里更新bpm_task_exe表时通过task_id从bpm_task_assigner_info
// // 表中获取审批人的完整信息
// TaskExtDO taskExtDO = new TaskExtDO();
// taskExtDO.setTaskId(task.getId());
// taskExtDO.setTenantId(task.getTenantId());
// taskExtDO.setUserId(assignee);
// taskExtDO.setProcessDefinitionId(processDefinitionId);
// taskExtDO.setUserName(task.getOwner());
// taskExtMapper.updateByTaskId(taskExtDO);
// }
// public void updateTaskExtCancel(DelegateTask task) {
// // 需要在事务提交后才进行查询不然查询不到历史的原因
// TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
//
// @Override
// public void afterCommit() {
// // 可能只是活动不是任务所以查询不到
// String taskId = task.getId();
// HistoricTaskInstance task = getHistoricTask(taskId);
// if (task == null) {
// return;
// }
//
// // 如果任务拓展表已经是完成的状态则跳过
// TaskExtDO taskExt = taskExtMapper.selectByTaskId(taskId);
// if (taskExt == null) {
// log.error("[updateTaskExtCancel][taskId({}) 查找不到对应的记录,可能存在问题]", taskId);
// return;
// }
// // 如果已经是最终的结果则跳过
// if (BpmProcessInstanceResultEnum.isEndResult(taskExt.getResult())) {
// log.warn("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId,
// taskExt.getResult());
// return;
// }
// taskExt.setEndTime(new Date());
// taskExt.setResult(BpmProcessInstanceResultEnum.CANCEL.getResult());
// taskExt.setComment(BpmProcessInstanceDeleteReasonEnum.translateReason(task.getDeleteReason()));
//
// // 更新任务
// taskExtMapper.updateById(taskExt);
// }
//
// });
// }
public HistoricTaskInstance getHistoricTask(String id) {
return historyService.createHistoricTaskInstanceQuery().taskId(id).singleResult();
}
public Map<String, List<Task>> getTaskMapByProcessInstanceIds(List<String> processInstanceIds) {
return BpmCollectionUtils.convertMultiMap(getTasksByProcessInstanceIds(processInstanceIds),
Task::getProcessInstanceId);
}
@Override
public List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds) {
if (CollUtil.isEmpty(processInstanceIds)) {
return Collections.emptyList();
}
return taskService.createTaskQuery().processInstanceIdIn(processInstanceIds).list();
}
@Override
public FormInfo getTaskFormModel(String taskId) {
Task task = getTask(taskId, null, null);
@ -414,7 +301,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
}
@Override
public void assigneeTask(BpmTaskAssigneeDTO dto) {
public void assigneeTask(BpmnTaskAssigneeDTO dto) {
TaskQuery query = taskService.createTaskQuery()
.taskId(dto.getTaskId()).taskTenantId(dto.getTenantId());
if (StringUtils.hasLength(dto.getOriginUserId())) {
@ -428,7 +315,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
}
@Override
public void commentTask(BpmTaskCommentDTO dto) {
public void commentTask(BpmnTaskCommentDTO dto) {
TaskQuery query = taskService.createTaskQuery().taskId(dto.getTaskId());
if (StringUtils.hasLength(dto.getTenantId())) {
query.taskTenantId(dto.getTenantId());

View File

@ -4,12 +4,12 @@ import cn.axzo.workflow.core.common.BpmConstants;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.repository.entity.ExtAxDictDO;
import cn.axzo.workflow.core.repository.mapper.ExtAxDictMapper;
import cn.axzo.workflow.core.service.BpmCategoryService;
import cn.axzo.workflow.core.service.CategoryService;
import cn.axzo.workflow.core.service.converter.BpmCategoryConverter;
import cn.axzo.workflow.core.service.dto.request.model.BpmCategoryCreateDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmCategoryDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmCategoryUpdateDTO;
import cn.axzo.workflow.core.service.dto.response.model.BpmCategoryItemVo;
import cn.axzo.workflow.core.service.dto.request.category.CategoryCreateDTO;
import cn.axzo.workflow.core.service.dto.request.category.CategorySearchDTO;
import cn.axzo.workflow.core.service.dto.request.category.CategoryUpdateDTO;
import cn.axzo.workflow.core.service.dto.response.category.CategoryItemVO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -31,7 +31,7 @@ import static cn.axzo.workflow.core.common.enums.BpmErrorCode.CATEGORY_VALUE_EXI
@Service
@RequiredArgsConstructor
@Slf4j
public class BpmCategoryServiceImpl extends ServiceImpl<ExtAxDictMapper, ExtAxDictDO> implements BpmCategoryService
public class CategoryServiceImpl extends ServiceImpl<ExtAxDictMapper, ExtAxDictDO> implements CategoryService
, BpmConstants {
@Resource
private ExtAxDictMapper bpmDictDataMapper;
@ -39,7 +39,7 @@ public class BpmCategoryServiceImpl extends ServiceImpl<ExtAxDictMapper, ExtAxDi
private final BpmCategoryConverter bpmCategoryConverter;
@Override
public int createBpmCategory(BpmCategoryCreateDTO dto) {
public int createCategory(CategoryCreateDTO dto) {
Optional<ExtAxDictDO> oneOpt = this.lambdaQuery().eq(ExtAxDictDO::getLabel, dto.getLabel())
.eq(ExtAxDictDO::getValue, dto.getValue())
.oneOpt();
@ -51,7 +51,7 @@ public class BpmCategoryServiceImpl extends ServiceImpl<ExtAxDictMapper, ExtAxDi
return bpmDictDataMapper.insert(dict);
}
private static void populateDict(BpmCategoryCreateDTO dto, ExtAxDictDO dict) {
private static void populateDict(CategoryCreateDTO dto, ExtAxDictDO dict) {
dict.setType(BPM_MODEL_CATEGORY);
dict.setLabel(dto.getLabel());
dict.setValue(dto.getValue());
@ -62,7 +62,7 @@ public class BpmCategoryServiceImpl extends ServiceImpl<ExtAxDictMapper, ExtAxDi
}
@Override
public int updateBpmCategory(BpmCategoryUpdateDTO dto) {
public int updateCategory(CategoryUpdateDTO dto) {
Optional<ExtAxDictDO> dictDO = this.lambdaQuery().eq(ExtAxDictDO::getId, dto.getId())
.oneOpt();
if (!dictDO.isPresent()) {
@ -75,26 +75,27 @@ public class BpmCategoryServiceImpl extends ServiceImpl<ExtAxDictMapper, ExtAxDi
}
@Override
public int deleteBpmCategory(Long id) {
public int deleteCategory(Long id) {
return bpmDictDataMapper.deleteById(id);
}
@Override
public Page<BpmCategoryItemVo> findBpmCategory(BpmCategoryDTO findDTO) {
public Page<CategoryItemVO> findCategory(CategorySearchDTO dto) {
LambdaQueryWrapper<ExtAxDictDO> queryWrapper = Wrappers.lambdaQuery(ExtAxDictDO.class)
.eq(StringUtils.isNotBlank(findDTO.getDictType()), ExtAxDictDO::getType, findDTO.getDictType())
.eq(StringUtils.isNotBlank(findDTO.getLabel()), ExtAxDictDO::getLabel, findDTO.getLabel())
.eq(StringUtils.isNotBlank(findDTO.getValue()), ExtAxDictDO::getValue, findDTO.getValue())
.eq(Objects.nonNull(findDTO.getStatus()), ExtAxDictDO::getStatus, findDTO.getStatus())
.eq(StringUtils.isNotBlank(findDTO.getTenantId()), ExtAxDictDO::getTenantId, findDTO.getTenantId());
.eq(StringUtils.isNotBlank(dto.getDictType()), ExtAxDictDO::getType, dto.getDictType())
.eq(StringUtils.isNotBlank(dto.getLabel()), ExtAxDictDO::getLabel, dto.getLabel())
.eq(StringUtils.isNotBlank(dto.getValue()), ExtAxDictDO::getValue, dto.getValue())
.eq(Objects.nonNull(dto.getStatus()), ExtAxDictDO::getStatus, dto.getStatus())
.eq(StringUtils.isNotBlank(dto.getTenantId()), ExtAxDictDO::getTenantId, dto.getTenantId());
Page<ExtAxDictDO> page = bpmDictDataMapper.selectPage(findDTO.toPage(), queryWrapper);
Page<ExtAxDictDO> page = bpmDictDataMapper.selectPage(new Page<>(dto.getPageNo(), dto.getPageSize()),
queryWrapper);
List<BpmCategoryItemVo> categoryVOS =
List<CategoryItemVO> categoryVOS =
page.getRecords().stream().map(bpmCategoryConverter::toVo).collect(Collectors.toList());
Page<BpmCategoryItemVo> result = new Page<>();
Page<CategoryItemVO> result = new Page<>();
result.setRecords(categoryVOS);
result.setSize(page.getSize());
result.setTotal(page.getTotal());

View File

@ -1,8 +1,8 @@
package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.service.BpmFormDefinitionService;
import cn.axzo.workflow.core.service.dto.request.form.FormDefinitionDTO;
import cn.axzo.workflow.core.service.FormDefinitionService;
import cn.axzo.workflow.core.service.dto.request.form.definition.FormDefinitionDTO;
import cn.axzo.workflow.core.service.dto.request.form.definition.FormDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.response.form.definition.FormDefinitionVO;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -30,7 +30,7 @@ import java.util.Objects;
@Slf4j
@Service
@RequiredArgsConstructor
public class BpmFormDefinitionServiceImpl implements BpmFormDefinitionService {
public class FormDefinitionServiceImpl implements FormDefinitionService {
@Resource
private FormRepositoryService formRepositoryService;

View File

@ -1,8 +1,8 @@
package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.service.BpmFormInstanceService;
import cn.axzo.workflow.core.service.dto.request.form.FormContentUpdateDTO;
import cn.axzo.workflow.core.service.FormInstanceService;
import cn.axzo.workflow.core.service.dto.request.form.instance.FormContentUpdateDTO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.TaskService;
@ -24,7 +24,7 @@ import java.util.Objects;
@Slf4j
@Service
@RequiredArgsConstructor
public class BpmFormInstanceServiceImpl implements BpmFormInstanceService {
public class FormInstanceServiceImpl implements FormInstanceService {
@Autowired
private FormRepositoryService formRepositoryService;

View File

@ -1,13 +1,13 @@
package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.service.BpmFormModelService;
import cn.axzo.workflow.core.service.FormModelService;
import cn.axzo.workflow.core.service.converter.FormModelConverter;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelSearchDTO;
import cn.axzo.workflow.core.service.dto.request.form.model.FormModelCreateDTO;
import cn.axzo.workflow.core.service.dto.request.form.model.FormModelUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.form.model.BpmModelBaseVO;
import cn.axzo.workflow.core.service.dto.response.form.model.FormModelBaseVO;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.flowable.engine.ManagementService;
import org.flowable.engine.RepositoryService;
@ -36,7 +36,7 @@ import static cn.axzo.workflow.core.common.BpmConstants.MODEL_META_INFO_FORM;
* @since 2023/7/25 10:13
*/
@Service
public class BpmFormModelServiceImpl implements BpmFormModelService {
public class FormModelServiceImpl implements FormModelService {
@Resource
private FormRepositoryService formRepositoryService;
@ -85,7 +85,7 @@ public class BpmFormModelServiceImpl implements BpmFormModelService {
}
@Override
public BpmPageResult<BpmModelBaseVO> getModelPage(BpmModelSearchDTO dto) {
public BpmPageResult<FormModelBaseVO> getModelPage(BpmnModelSearchDTO dto) {
String tableName = managementService.getTableName(Model.class);
StringBuilder baseQuerySql = new StringBuilder("SELECT * FROM ")
.append(tableName);
@ -126,7 +126,7 @@ public class BpmFormModelServiceImpl implements BpmFormModelService {
}
@Override
public BpmModelBaseVO getById(String formModelId, @Nullable String tenantId) {
public FormModelBaseVO getById(String formModelId, @Nullable String tenantId) {
Model model = repositoryService.getModel(formModelId);
if (Objects.isNull(model) && !Objects.equals(model.getMetaInfo(), MODEL_META_INFO_FORM)) {
throw new WorkflowEngineException("模型不存在");
@ -138,7 +138,7 @@ public class BpmFormModelServiceImpl implements BpmFormModelService {
}
@Override
public BpmModelBaseVO getByKey(String formModelKey, @Nullable String tenantId) {
public FormModelBaseVO getByKey(String formModelKey, @Nullable String tenantId) {
ModelQuery modelQuery = repositoryService.createModelQuery();
if (StringUtils.hasLength(tenantId)) {
modelQuery.modelTenantId(tenantId);

View File

@ -1,118 +0,0 @@
package cn.axzo.workflow.server.controller.web;
import cn.axzo.workflow.core.service.BpmTaskService;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskAssigneeDTO;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskTodoPageSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.task.BpmHistoricTaskInstanceGroupVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmHistoricTaskInstanceVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskDonePageItemVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskTodoPageItemVO;
import cn.azxo.framework.common.model.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.flowable.form.api.FormInfo;
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
@Slf4j
@RequestMapping("/web/v1/api/process/task")
@RestController
public class BpmTaskController {
@Autowired
private BpmTaskService bpmTaskService;
/**
* 待审核列表
*/
@GetMapping("/page/todo")
public CommonResponse<BpmPageResult<BpmTaskTodoPageItemVO>> getTodoTaskPage(@RequestBody BpmTaskTodoPageSearchDTO dto) {
log.info("待审核列表 getTodoTaskPage===>>>参数:{}", dto);
return CommonResponse.success(bpmTaskService.getTodoTaskPage(dto));
}
/**
* 已完成的审批列表
*/
@GetMapping("/page/done")
public CommonResponse<BpmPageResult<BpmTaskDonePageItemVO>> getDoneTaskPage(@RequestBody BpmTaskTodoPageSearchDTO dto) {
log.info("已完成的审批列表 getDoneTaskPage===>>>参数:{}", dto);
return CommonResponse.success(bpmTaskService.getDoneTaskPage(dto));
}
/**
* 同意
*/
@PutMapping("/approve")
public CommonResponse<Boolean> approveTask(@RequestBody BpmTaskAuditDTO dto) {
log.info("同意 approveTask===>>>参数:{}", dto);
bpmTaskService.approveTask(dto);
return CommonResponse.success(true);
}
/**
* 拒绝
*/
@PutMapping("/reject")
public CommonResponse<Boolean> rejectTask(@Valid @RequestBody BpmTaskAuditDTO dto) {
log.info("拒绝 rejectTask===>>>参数:{}", dto);
bpmTaskService.rejectTask(dto);
return CommonResponse.success(true);
}
@Operation(summary = "直接修改审批任务的审批人")
@PutMapping("/assignee")
public CommonResponse<Boolean> assigneeTask(@RequestBody BpmTaskAssigneeDTO dto) {
bpmTaskService.assigneeTask(dto);
return CommonResponse.success(true);
}
/**
* 获取指定流程实例的审批过程信息
* <p>
* 同一层级机构
*/
@GetMapping("/list/flat")
public CommonResponse<List<BpmHistoricTaskInstanceVO>> getTaskListFlatByProcessInstanceId(@RequestParam String processInstanceId,
@RequestParam(required
= false) String tenantId) {
log.info("获取历史已审批的列表详情 getTaskListByProcessInstanceId===>>>参数:{}", processInstanceId);
return CommonResponse.success(bpmTaskService.getHistoricTaskListByProcessInstanceId(processInstanceId,
tenantId));
}
@GetMapping("/list/group")
public CommonResponse<List<BpmHistoricTaskInstanceGroupVO>> getTaskListGroupByProcessInstanceId(@RequestParam String processInstanceId,
@RequestParam(required
= false) String tenantId) {
log.info("获取历史已审批的列表详情 getTaskListByProcessInstanceId===>>>参数:{}", processInstanceId);
return CommonResponse.success(bpmTaskService.getHistoricTaskListGroupByProcessInstanceId(processInstanceId,
tenantId));
}
/**
* 获取实例正在审核的人列表
*/
@GetMapping("/active/listTasksByProcessInstanceId")
public CommonResponse<List<Task>> getActiveTasksByProcessInstanceId(@RequestBody String processInstanceId) {
log.info(" 获取实例正在审核的人列表 getActiveTasksByProcessInstanceId===>>>参数:{}", processInstanceId);
List<Task> result = bpmTaskService.getActiveTasksByProcessInstanceId(processInstanceId);
return CommonResponse.success(result);
}
@GetMapping("/form")
public CommonResponse<FormInfo> getTaskForm(@NotBlank(message = "任务 ID 不能为空") @RequestParam String taskId) {
return CommonResponse.success(bpmTaskService.getTaskFormModel(taskId));
}
}

View File

@ -1,10 +1,10 @@
package cn.axzo.workflow.server.controller.web;
package cn.axzo.workflow.server.controller.web.bpmn;
import cn.axzo.workflow.core.service.BpmProcessDefinitionService;
import cn.axzo.workflow.core.service.dto.request.definition.BpmProcessDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.process.BpmProcessDefinitionPageDTO;
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
import cn.axzo.workflow.core.service.dto.request.bpmn.definition.BpmnProcessDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessDefinitionPageDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessDefinitionVO;
import cn.azxo.framework.common.model.CommonResponse;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
@ -17,26 +17,28 @@ import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import static cn.azxo.framework.common.model.CommonResponse.success;
@Slf4j
@RequestMapping("/web/v1/api/process/definition")
@RestController
public class BpmProcessDefinitionController {
public class BpmnProcessDefinitionController {
@Resource
private BpmProcessDefinitionService bpmProcessDefinitionService;
private BpmnProcessDefinitionService bpmnProcessDefinitionService;
/**
* 获取活跃的流程定义分页
*/
@GetMapping("/page")
public CommonResponse<BpmPageResult<BpmProcessDefinitionVO>> getProcessDefinitionPage(@Valid @RequestBody BpmProcessDefinitionPageDTO dto) {
public CommonResponse<BpmPageResult<BpmnProcessDefinitionVO>> getProcessDefinitionPage(@Valid @RequestBody BpmnProcessDefinitionPageDTO dto) {
log.info("获取活跃的流程定义分页getProcessDefinitionPage===>>>参数:{}", JSON.toJSONString(dto));
return CommonResponse.success(bpmProcessDefinitionService.getProcessDefinitionPage(dto));
return success(bpmnProcessDefinitionService.getProcessDefinitionPage(dto));
}
@PutMapping("/update")
public CommonResponse updateProcessDefinition(@RequestBody BpmProcessDefinitionUpdateDTO dto) {
bpmProcessDefinitionService.updateProcessDefinition(dto);
return CommonResponse.success(true);
public CommonResponse updateProcessDefinition(@RequestBody BpmnProcessDefinitionUpdateDTO dto) {
bpmnProcessDefinitionService.updateProcessDefinition(dto);
return success(true);
}
@ -47,9 +49,9 @@ public class BpmProcessDefinitionController {
* @return 流程定义
*/
@GetMapping("/get")
public CommonResponse<BpmProcessDefinitionVO> getProcessDefinition(@Valid @NotBlank(message = "流程定义ID不能为空") @RequestParam String id) {
public CommonResponse<BpmnProcessDefinitionVO> getProcessDefinition(@Valid @NotBlank(message = "流程定义ID不能为空") @RequestParam String id) {
log.info("获取活跃的流程定义分页getProcessDefinition===>>>参数:{}", JSON.toJSONString(id));
return CommonResponse.success(bpmProcessDefinitionService.getProcessDefinition(id));
return success(bpmnProcessDefinitionService.getProcessDefinition(id));
}
@ -63,8 +65,8 @@ public class BpmProcessDefinitionController {
public CommonResponse<ProcessDefinition> getProcessDefinitionByDeploymentId(@Valid @NotBlank(message = "流程部署ID" +
"不能为空") @RequestParam String deploymentId) {
log.info(" 获得 deploymentId 对应的 getProcessDefinitionByDeploymentId===>>>参数:{}", JSON.toJSONString(deploymentId));
ProcessDefinition result = bpmProcessDefinitionService.getProcessDefinitionByDeploymentId(deploymentId);
return CommonResponse.success(result);
ProcessDefinition result = bpmnProcessDefinitionService.getProcessDefinitionByDeploymentId(deploymentId);
return success(result);
}
@ -75,10 +77,11 @@ public class BpmProcessDefinitionController {
* @return 流程定义
*/
@GetMapping("/active/getByKey")
public CommonResponse<BpmProcessDefinitionVO> getActiveProcessDefinitionByKey(@Valid @NotBlank(message = "模型定义KEY" +
public CommonResponse<BpmnProcessDefinitionVO> getActiveProcessDefinitionByKey(@Valid @NotBlank(message =
"模型定义KEY" +
"不能为空") @RequestParam String key) {
log.info("获得流程定义标识对应的激活的流程定义 getActiveProcessDefinitionByKey===>>>参数:{}", JSON.toJSONString(key));
return CommonResponse.success(bpmProcessDefinitionService.getActiveProcessDefinitionByKey(key));
return success(bpmnProcessDefinitionService.getActiveProcessDefinitionByKey(key));
}
@ -92,8 +95,8 @@ public class BpmProcessDefinitionController {
public CommonResponse<Boolean> getActiveProcessDefinitionByKey(@Valid @NotBlank(message = "流程定义ID不能为空") @RequestParam String processDefinitionId,
@Valid @NotNull(message = "状态不能为空") @RequestParam Integer state) {
log.info("挂起/激活流程 updateProcessDefinitionSuspendedState===>>>参数:{},{}", processDefinitionId, state);
bpmProcessDefinitionService.updateProcessDefinitionSuspendedState(processDefinitionId, state);
return CommonResponse.success(true);
bpmnProcessDefinitionService.updateProcessDefinitionSuspendedState(processDefinitionId, state);
return success(true);
}
@ -106,7 +109,7 @@ public class BpmProcessDefinitionController {
public CommonResponse<String> getActiveProcessDefinitionId(@Valid @NotBlank(message = "租户不能为空") @RequestParam String tenantId,
@Valid @NotBlank(message = "分类不能为空") @RequestParam String category) {
log.info("挂起/激活流程 getActiveProcessDefinitionId===>>>参数:{},{}", tenantId, category);
String result = bpmProcessDefinitionService.getActiveProcessDefinitionId(tenantId, category);
return CommonResponse.success(result);
String result = bpmnProcessDefinitionService.getActiveProcessDefinitionId(tenantId, category);
return success(result);
}
}

View File

@ -1,73 +1,80 @@
package cn.axzo.workflow.server.controller.web;
package cn.axzo.workflow.server.controller.web.bpmn;
import cn.axzo.workflow.core.service.BpmProcessInstanceService;
import cn.axzo.workflow.core.service.dto.request.process.*;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.*;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessInstancePageItemVO;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessInstanceVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstancePageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstanceVO;
import cn.azxo.framework.common.model.CommonResponse;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import static cn.azxo.framework.common.model.CommonResponse.success;
@Slf4j
@RequestMapping("/web/v1/api/process/instance")
@RestController
public class BpmProcessInstanceController {
public class BpmnProcessInstanceController {
@Autowired
private BpmProcessInstanceService bpmProcessInstanceService;
private BpmnProcessInstanceService bpmnProcessInstanceService;
/**
* 我发起的审批列表
*/
@GetMapping("/page/my")
public CommonResponse<BpmPageResult<BpmProcessInstancePageItemVO>> getMyProcessInstancePage(@RequestBody BpmProcessInstanceMyPageReqVO dto) {
public CommonResponse<BpmPageResult<BpmnProcessInstancePageItemVO>> getMyProcessInstancePage(@RequestBody BpmnProcessInstanceMyPageReqVO dto) {
log.info("我发起的审批列表 getOwnTaskPage===>>>参数:{}", JSON.toJSONString(dto));
BpmPageResult<BpmProcessInstancePageItemVO> result = bpmProcessInstanceService.getMyProcessInstancePage(dto);
return CommonResponse.success(result);
BpmPageResult<BpmnProcessInstancePageItemVO> result = bpmnProcessInstanceService.getMyProcessInstancePage(dto);
return success(result);
}
/**
* 发起审核
*/
@PostMapping("/create")
public CommonResponse<String> createProcessInstance(@Valid @RequestBody BpmProcessInstanceCreateDTO dto) {
public CommonResponse<String> createProcessInstance(@Valid @RequestBody BpmnProcessInstanceCreateDTO dto) {
log.info("发起审核createProcessInstance===>>>参数:{}", JSON.toJSONString(dto));
String result = bpmProcessInstanceService.createProcessInstance(dto);
return CommonResponse.success(result);
String result = bpmnProcessInstanceService.createProcessInstance(dto);
return success(result);
}
@PostMapping("/form/create")
public CommonResponse<String> createProcessInstanceWith(@Valid @RequestBody BpmProcessInstanceCreateWithFormDTO dto) {
public CommonResponse<String> createProcessInstanceWith(@Valid @RequestBody BpmnProcessInstanceCreateWithFormDTO dto) {
log.info("发起审核createProcessInstanceWith===>>>参数:{}", JSON.toJSONString(dto));
String result = bpmProcessInstanceService.createProcessInstanceWithForm(dto);
return CommonResponse.success(result);
String result = bpmnProcessInstanceService.createProcessInstanceWithForm(dto);
return success(result);
}
@DeleteMapping("/cancel")
public CommonResponse<Boolean> cancelProcessInstant(@Valid @RequestBody BpmProcessInstanceCancelDTO dto) {
public CommonResponse<Boolean> cancelProcessInstant(@Valid @RequestBody BpmnProcessInstanceCancelDTO dto) {
log.info("取消审核cancelProcessInstant===>>>参数:{}", JSON.toJSONString(dto));
return CommonResponse.success(bpmProcessInstanceService.cancelProcessInstance(dto));
if (!StringUtils.hasLength(dto.getId()) && !StringUtils.hasLength(dto.getBusinessKey())) {
throw new WorkflowEngineException("条件必须二选一");
}
return success(bpmnProcessInstanceService.cancelProcessInstance(dto));
}
/**
* 获得流程实例
*
* @param dto {@link BpmProcessInstanceQueryDTO} 可根据 Id,BusinessKey进行查询
* @param dto {@link BpmnProcessInstanceQueryDTO} 可根据 Id,BusinessKey进行查询
* @return 流程实例, 租户Id不必传
*/
@GetMapping("/get")
public CommonResponse<BpmProcessInstanceVO> getProcessInstanceVO(@RequestBody BpmProcessInstanceQueryDTO dto) {
public CommonResponse<BpmnProcessInstanceVO> getProcessInstanceVO(@RequestBody BpmnProcessInstanceQueryDTO dto) {
log.info("获得历史的流程实例 getProcessInstanceVO===>>>参数:{}", JSON.toJSONString(dto));
BpmProcessInstanceVO result = bpmProcessInstanceService.getProcessInstanceVO(dto);
return CommonResponse.success(result);
BpmnProcessInstanceVO result = bpmnProcessInstanceService.getProcessInstanceVO(dto);
return success(result);
}
/**
@ -81,14 +88,14 @@ public class BpmProcessInstanceController {
public CommonResponse<Boolean> updateProcessStatus(@RequestParam String processDefinitionId,
@RequestParam Integer status) {
log.info("获得流程实例 updateProcessStatus===>>>参数:{},{}", processDefinitionId, status);
Boolean result = bpmProcessInstanceService.updateProcessStatus(processDefinitionId, status);
return CommonResponse.success(result);
Boolean result = bpmnProcessInstanceService.updateProcessStatus(processDefinitionId, status);
return success(result);
}
@GetMapping("/graphical")
public CommonResponse<ObjectNode> processInstanceGraphical(@RequestParam String processInstanceId,
@RequestParam String tenantId) {
return CommonResponse.success(bpmProcessInstanceService.getProcessInstanceGraphical(processInstanceId,
return success(bpmnProcessInstanceService.getProcessInstanceGraphical(processInstanceId,
tenantId));
}

View File

@ -1,12 +1,12 @@
package cn.axzo.workflow.server.controller.web;
package cn.axzo.workflow.server.controller.web.bpmn;
import cn.axzo.workflow.core.service.BpmProcessModelService;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelCreateDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelSearchDTO;
import cn.axzo.workflow.core.service.dto.request.model.BpmModelUpdateDTO;
import cn.axzo.workflow.core.service.BpmnProcessModelService;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelCreateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelSearchDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.model.BpmnModelUpdateDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.form.model.BpmModelBaseVO;
import cn.axzo.workflow.core.service.dto.response.model.BpmModelDetailVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.model.BpmnModelDetailVO;
import cn.axzo.workflow.core.service.dto.response.form.model.FormModelBaseVO;
import cn.azxo.framework.common.model.CommonResponse;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.Operation;
@ -19,25 +19,27 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import static cn.azxo.framework.common.model.CommonResponse.success;
@Tag(name = "运维管理 - 流程模型")
@Slf4j
@RequestMapping("/web/v1/api/process/model")
@RestController
@Validated
public class BpmProcessModelController {
public class BpmnProcessModelController {
@Autowired
private BpmProcessModelService bpmProcessModelService;
private BpmnProcessModelService bpmnProcessModelService;
/**
* 获取流程模型的查询结果
*/
@Operation(summary = "流程模型列表")
@GetMapping("/page")
public CommonResponse<BpmPageResult<BpmModelBaseVO>> page(@Valid @RequestBody BpmModelSearchDTO dto) {
public CommonResponse<BpmPageResult<FormModelBaseVO>> page(@Valid @RequestBody BpmnModelSearchDTO dto) {
log.info("获取流程模型getModelPage===>>>参数:{}", JSON.toJSONString(dto));
BpmPageResult<BpmModelBaseVO> result = bpmProcessModelService.getModelPage(dto);
return CommonResponse.success(result);
BpmPageResult<FormModelBaseVO> result = bpmnProcessModelService.getModelPage(dto);
return success(result);
}
/**
@ -46,17 +48,17 @@ public class BpmProcessModelController {
*/
@Operation(summary = "创建流程模型")
@PostMapping("/create")
public CommonResponse<String> create(@Valid @RequestBody BpmModelCreateDTO dto) {
public CommonResponse<String> create(@Valid @RequestBody BpmnModelCreateDTO dto) {
log.info("创建流程createBpmModel===>>>参数:{}", JSON.toJSONString(dto));
String result = bpmProcessModelService.createBpmModel(dto);
return CommonResponse.success(result);
String result = bpmnProcessModelService.createBpmModel(dto);
return success(result);
}
@Operation(summary = "通过 Xml 创建模型", hidden = true)
@PostMapping("/xml/create")
public CommonResponse<String> createWithXml() {
// TODO 不完善的接口
return CommonResponse.success(bpmProcessModelService.createBpmModelWithXml(""));
return success(bpmnProcessModelService.createBpmModelWithXml(""));
}
/**
@ -64,11 +66,11 @@ public class BpmProcessModelController {
*/
@Operation(summary = "通过模型ID查询指定流程模型")
@GetMapping("/get")
public CommonResponse<BpmModelDetailVO> getById(@RequestParam String processModelId,
@RequestParam String tenantId) {
public CommonResponse<BpmnModelDetailVO> getById(@RequestParam String processModelId,
@RequestParam String tenantId) {
log.info("获取模型getModelDetailById===>>>参数:{}", JSON.toJSONString(processModelId));
BpmModelDetailVO result = bpmProcessModelService.getById(processModelId, tenantId);
return CommonResponse.success(result);
BpmnModelDetailVO result = bpmnProcessModelService.getById(processModelId, tenantId);
return success(result);
}
@ -77,11 +79,11 @@ public class BpmProcessModelController {
*/
@Operation(summary = "通过模型KEY查询指定流程模型")
@GetMapping("/getByKey")
public CommonResponse<BpmModelDetailVO> getByKey(@RequestParam String processModelKey,
@RequestParam String tenantId) {
public CommonResponse<BpmnModelDetailVO> getByKey(@RequestParam String processModelKey,
@RequestParam String tenantId) {
log.info("获取模型getModelDetailByKey===>>>参数:{}", JSON.toJSONString(processModelKey));
BpmModelDetailVO result = bpmProcessModelService.getByKey(processModelKey, tenantId);
return CommonResponse.success(result);
BpmnModelDetailVO result = bpmnProcessModelService.getByKey(processModelKey, tenantId);
return success(result);
}
@ -90,10 +92,10 @@ public class BpmProcessModelController {
*/
@Operation(summary = "更新流程模型")
@PutMapping("/update")
public CommonResponse<String> update(@Valid @RequestBody BpmModelUpdateDTO dto) {
public CommonResponse<String> update(@Valid @RequestBody BpmnModelUpdateDTO dto) {
log.info("修改流程信息updateBpmModel===>>>参数:{}", JSON.toJSONString(dto));
bpmProcessModelService.updateBpmModel(dto);
return CommonResponse.success();
bpmnProcessModelService.updateBpmModel(dto);
return success();
}
@ -106,8 +108,8 @@ public class BpmProcessModelController {
public CommonResponse<String> deployById(@Valid @NotBlank(message = "模型 ID 不能为空") @RequestParam String processModelId,
@RequestParam(required = false) String tenantId) {
log.info("部署模型deployBpmModelById===>>>参数:{}", JSON.toJSONString(processModelId));
String result = bpmProcessModelService.deployBpmModelById(processModelId, tenantId);
return CommonResponse.success(result);
String result = bpmnProcessModelService.deployBpmModelById(processModelId, tenantId);
return success(result);
}
@ -120,8 +122,8 @@ public class BpmProcessModelController {
public CommonResponse<String> deployByKey(@Valid @NotBlank(message = "模型 KEY 不能为空") @RequestParam String processModelKey,
@RequestParam(required = false) String tenantId) {
log.info("部署模型deployBpmModelByKey===>>>参数:{}", JSON.toJSONString(processModelKey));
String result = bpmProcessModelService.deployBpmModelByKey(processModelKey, tenantId);
return CommonResponse.success(result);
String result = bpmnProcessModelService.deployBpmModelByKey(processModelKey, tenantId);
return success(result);
}
@ -133,8 +135,8 @@ public class BpmProcessModelController {
public CommonResponse<Void> deleteById(@RequestParam String processModelId,
@RequestParam(required = false) String tenantId) {
log.info("删除模型deleteBpmModel===>>>参数:{}", JSON.toJSONString(processModelId));
bpmProcessModelService.deleteBpmModelById(processModelId, tenantId);
return CommonResponse.success();
bpmnProcessModelService.deleteBpmModelById(processModelId, tenantId);
return success();
}
@Operation(summary = "删除指定模型 KEY 的流程模型")
@ -142,8 +144,8 @@ public class BpmProcessModelController {
public CommonResponse<Void> deleteByKey(@RequestParam String processModelKey,
@RequestParam(required = false) String tenantId) {
log.info("删除模型deleteBpmModel===>>>参数:{}", JSON.toJSONString(processModelKey));
bpmProcessModelService.deleteBpmModelByKey(processModelKey, tenantId);
return CommonResponse.success();
bpmnProcessModelService.deleteBpmModelByKey(processModelKey, tenantId);
return success();
}
}

View File

@ -0,0 +1,116 @@
package cn.axzo.workflow.server.controller.web.bpmn;
import cn.axzo.workflow.core.service.BpmnTaskService;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAssigneeDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskTodoPageSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.*;
import cn.azxo.framework.common.model.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.flowable.form.api.FormInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
import static cn.azxo.framework.common.model.CommonResponse.success;
@Slf4j
@RequestMapping("/web/v1/api/process/task")
@RestController
public class BpmnTaskController {
@Autowired
private BpmnTaskService bpmnTaskService;
/**
* 待审核列表
*/
@GetMapping("/page/todo")
public CommonResponse<BpmPageResult<BpmTaskTodoPageItemVO>> getTodoTaskPage(@RequestBody BpmnTaskTodoPageSearchDTO dto) {
log.info("待审核列表 getTodoTaskPage===>>>参数:{}", dto);
return success(bpmnTaskService.getTodoTaskPage(dto));
}
/**
* 已完成的审批列表
*/
@GetMapping("/page/done")
public CommonResponse<BpmPageResult<BpmnTaskDonePageItemVO>> getDoneTaskPage(@RequestBody BpmnTaskTodoPageSearchDTO dto) {
log.info("已完成的审批列表 getDoneTaskPage===>>>参数:{}", dto);
return success(bpmnTaskService.getDoneTaskPage(dto));
}
/**
* 同意
*/
@PutMapping("/approve")
public CommonResponse<Boolean> approveTask(@RequestBody BpmnTaskAuditDTO dto) {
log.info("同意 approveTask===>>>参数:{}", dto);
bpmnTaskService.approveTask(dto);
return success(true);
}
/**
* 拒绝
*/
@PutMapping("/reject")
public CommonResponse<Boolean> rejectTask(@Valid @RequestBody BpmnTaskAuditDTO dto) {
log.info("拒绝 rejectTask===>>>参数:{}", dto);
bpmnTaskService.rejectTask(dto);
return success(true);
}
@Operation(summary = "直接修改审批任务的审批人")
@PutMapping("/assignee")
public CommonResponse<Boolean> assigneeTask(@RequestBody BpmnTaskAssigneeDTO dto) {
bpmnTaskService.assigneeTask(dto);
return success(true);
}
/**
* 获取指定流程实例的审批过程信息
* <p>
* 同一层级机构
*/
@GetMapping("/list/flat")
public CommonResponse<List<BpmnHistoricTaskInstanceVO>> getTaskListFlatByProcessInstanceId(@RequestParam String processInstanceId,
@RequestParam(required
= false) String tenantId) {
log.info("获取历史已审批的列表详情 getTaskListByProcessInstanceId===>>>参数:{}", processInstanceId);
return success(bpmnTaskService.getHistoricTaskListByProcessInstanceId(processInstanceId,
tenantId));
}
@GetMapping("/list/group")
public CommonResponse<List<BpmnHistoricTaskInstanceGroupVO>> getTaskListGroupByProcessInstanceId(@RequestParam String processInstanceId,
@RequestParam(required
= false) String tenantId) {
log.info("获取历史已审批的列表详情 getTaskListByProcessInstanceId===>>>参数:{}", processInstanceId);
return success(bpmnTaskService.getHistoricTaskListGroupByProcessInstanceId(processInstanceId,
tenantId));
}
/**
* 获取实例正在审核的人列表
*/
@GetMapping("/active/list")
public CommonResponse<List<BpmTaskInstanceVO>> getActiveTasksByProcessInstanceId(@RequestParam String processInstanceId,
@RequestParam String tenantId) {
log.info(" 获取实例正在审核的人列表 getActiveTasksByProcessInstanceId===>>>参数:{}", processInstanceId);
return success(bpmnTaskService.getActiveTasksByProcessInstanceId(processInstanceId, tenantId));
}
@GetMapping("/form")
public CommonResponse<FormInfo> getTaskForm(@NotBlank(message = "任务 ID 不能为空") @RequestParam String taskId) {
return success(bpmnTaskService.getTaskFormModel(taskId));
}
}

Some files were not shown because too many files have changed in this diff Show More