Loki
2 years ago
224 changed files with 12560 additions and 1 deletions
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<parent> |
||||
<artifactId>yudao</artifactId> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<version>${revision}</version> |
||||
</parent> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<modules> |
||||
<module>yudao-module-bpm-api</module> |
||||
<module>yudao-module-bpm-base</module> |
||||
<module>yudao-module-bpm-impl-flowable</module> |
||||
<module>yudao-module-bpm-impl-activiti</module> |
||||
</modules> |
||||
<artifactId>yudao-module-bpm</artifactId> |
||||
<packaging>pom</packaging> |
||||
|
||||
<name>${project.artifactId}</name> |
||||
<description> |
||||
bpm 包下,业务流程管理(Business Process Management),我们放工作流的功能。 |
||||
例如说:流程定义、表单配置、审核中心(我的申请、我的待办、我的已办)等等 |
||||
bpm 解释:https://baike.baidu.com/item/BPM/1933 |
||||
|
||||
目前提供两套实现方案: |
||||
1. 基于 Activiti 7 实现的 yudao-module-bpm-impl-activiti |
||||
2. 基于 Flowable 6 实现的 yudao-module-bpm-impl-flowable |
||||
两套实现会存在共享的逻辑,所以会继承 yudao-module-impl-base |
||||
</description> |
||||
|
||||
</project> |
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<parent> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-module-bpm</artifactId> |
||||
<version>${revision}</version> |
||||
</parent> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<artifactId>yudao-module-bpm-api</artifactId> |
||||
<packaging>jar</packaging> |
||||
|
||||
<name>${project.artifactId}</name> |
||||
<description> |
||||
bpm 模块 API,暴露给其它模块调用 |
||||
</description> |
||||
|
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-common</artifactId> |
||||
</dependency> |
||||
|
||||
<!-- 参数校验 --> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-validation</artifactId> |
||||
<optional>true</optional> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
</project> |
@ -0,0 +1,4 @@
|
||||
/** |
||||
* bpm API 包,定义暴露给其它模块的 API |
||||
*/ |
||||
package cn.iocoder.yudao.module.bpm.api; |
@ -0,0 +1,23 @@
|
||||
package cn.iocoder.yudao.module.bpm.api.task; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
||||
|
||||
import javax.validation.Valid; |
||||
|
||||
/** |
||||
* 流程实例 Api 接口 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
public interface BpmProcessInstanceApi { |
||||
|
||||
/** |
||||
* 创建流程实例(提供给内部) |
||||
* |
||||
* @param userId 用户编号 |
||||
* @param reqDTO 创建信息 |
||||
* @return 实例的编号 |
||||
*/ |
||||
String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO); |
||||
|
||||
} |
@ -0,0 +1,33 @@
|
||||
package cn.iocoder.yudao.module.bpm.api.task.dto; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* 流程实例的创建 Request DTO |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Data |
||||
public class BpmProcessInstanceCreateReqDTO { |
||||
|
||||
/** |
||||
* 流程定义的标识 |
||||
*/ |
||||
@NotEmpty(message = "流程定义的标识不能为空") |
||||
private String processDefinitionKey; |
||||
/** |
||||
* 变量实例 |
||||
*/ |
||||
private Map<String, Object> variables; |
||||
|
||||
/** |
||||
* 业务的唯一标识 |
||||
* |
||||
* 例如说,请假申请的编号。通过它,可以查询到对应的实例 |
||||
*/ |
||||
@NotEmpty(message = "业务的唯一标识") |
||||
private String businessKey; |
||||
} |
@ -0,0 +1,13 @@
|
||||
package cn.iocoder.yudao.module.bpm.enums; |
||||
|
||||
/** |
||||
* BPM 字典类型的枚举类 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
public interface DictTypeConstants { |
||||
|
||||
String TASK_ASSIGN_RULE_TYPE = "bpm_task_assign_rule_type"; // 任务分配规则类型
|
||||
String TASK_ASSIGN_SCRIPT = "bpm_task_assign_script"; // 任务分配自定义脚本
|
||||
|
||||
} |
@ -0,0 +1,64 @@
|
||||
package cn.iocoder.yudao.module.bpm.enums; |
||||
|
||||
import cn.iocoder.yudao.framework.common.exception.ErrorCode; |
||||
|
||||
/** |
||||
* 工作流 错误码枚举类 |
||||
* |
||||
* 工作流系统,使用 1-009-000-000 段 |
||||
*/ |
||||
public interface ErrorCodeConstants { |
||||
|
||||
// ========== 通用流程处理 模块 1-009-000-000 ==========
|
||||
ErrorCode HIGHLIGHT_IMG_ERROR = new ErrorCode(1009000002, "获取高亮流程图异常"); |
||||
|
||||
// ========== OA 流程模块 1-009-001-000 ==========
|
||||
ErrorCode OA_LEAVE_NOT_EXISTS = new ErrorCode(1009001001, "请假申请不存在"); |
||||
ErrorCode OA_PM_POST_NOT_EXISTS = new ErrorCode(1009001002, "项目经理岗位未设置"); |
||||
ErrorCode OA_DEPART_PM_POST_NOT_EXISTS = new ErrorCode(1009001009, "部门的项目经理不存在"); |
||||
ErrorCode OA_BM_POST_NOT_EXISTS = new ErrorCode(1009001004, "部门经理岗位未设置"); |
||||
ErrorCode OA_DEPART_BM_POST_NOT_EXISTS = new ErrorCode(1009001005, "部门的部门经理不存在"); |
||||
ErrorCode OA_HR_POST_NOT_EXISTS = new ErrorCode(1009001006, "HR岗位未设置"); |
||||
ErrorCode OA_DAY_LEAVE_ERROR = new ErrorCode(1009001007, "请假天数必须>=1"); |
||||
|
||||
// ========== 流程模型 1-009-002-000 ==========
|
||||
ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1009002000, "已经存在流程标识为【{}】的流程"); |
||||
ErrorCode MODEL_NOT_EXISTS = new ErrorCode(1009002001, "流程模型不存在"); |
||||
ErrorCode MODEL_KEY_VALID = new ErrorCode(1009002002, "流程标识格式不正确,需要以字母或下划线开头,后接任意字母、数字、中划线、下划线、句点!"); |
||||
ErrorCode MODEL_DEPLOY_FAIL_FORM_NOT_CONFIG = new ErrorCode(1009002003, "部署流程失败,原因:流程表单未配置,请点击【修改流程】按钮进行配置"); |
||||
ErrorCode MODEL_DEPLOY_FAIL_TASK_ASSIGN_RULE_NOT_CONFIG = new ErrorCode(1009002004, "部署流程失败," + |
||||
"原因:用户任务({})未配置分配规则,请点击【修改流程】按钮进行配置"); |
||||
ErrorCode MODEL_DEPLOY_FAIL_TASK_INFO_EQUALS = new ErrorCode(1009003005, "流程定义部署失败,原因:信息未发生变化"); |
||||
|
||||
// ========== 流程定义 1-009-003-000 ==========
|
||||
ErrorCode PROCESS_DEFINITION_KEY_NOT_MATCH = new ErrorCode(1009003000, "流程定义的标识期望是({}),当前是({}),请修改 BPMN 流程图"); |
||||
ErrorCode PROCESS_DEFINITION_NAME_NOT_MATCH = new ErrorCode(1009003001, "流程定义的名字期望是({}),当前是({}),请修改 BPMN 流程图"); |
||||
ErrorCode PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1009003002, "流程定义不存在"); |
||||
ErrorCode PROCESS_DEFINITION_IS_SUSPENDED = new ErrorCode(1009003003, "流程定义处于挂起状态"); |
||||
ErrorCode PROCESS_DEFINITION_BPMN_MODEL_NOT_EXISTS = new ErrorCode(1009003004, "流程定义的模型不存在"); |
||||
|
||||
// ========== 流程实例 1-009-004-000 ==========
|
||||
ErrorCode PROCESS_INSTANCE_NOT_EXISTS = new ErrorCode(1009004000, "流程实例不存在"); |
||||
ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS = new ErrorCode(1009004001, "流程取消失败,流程不处于运行中"); |
||||
ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF = new ErrorCode(1009004002, "流程取消失败,该流程不是你发起的"); |
||||
|
||||
// ========== 流程任务 1-009-005-000 ==========
|
||||
ErrorCode TASK_COMPLETE_FAIL_NOT_EXISTS = new ErrorCode(1009005000, "审批任务失败,原因:该任务不处于未审批"); |
||||
ErrorCode TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF = new ErrorCode(1009005001, "审批任务失败,原因:该任务的审批人不是你"); |
||||
|
||||
// ========== 流程任务分配规则 1-009-006-000 ==========
|
||||
ErrorCode TASK_ASSIGN_RULE_EXISTS = new ErrorCode(1009006000, "流程({}) 的任务({}) 已经存在分配规则"); |
||||
ErrorCode TASK_ASSIGN_RULE_NOT_EXISTS = new ErrorCode(1009006001, "流程任务分配规则不存在"); |
||||
ErrorCode TASK_UPDATE_FAIL_NOT_MODEL = new ErrorCode(1009006002, "只有流程模型的任务分配规则,才允许被修改"); |
||||
ErrorCode TASK_CREATE_FAIL_NO_CANDIDATE_USER = new ErrorCode(1009006003, "操作失败,原因:找不到任务的审批人!"); |
||||
ErrorCode TASK_ASSIGN_SCRIPT_NOT_EXISTS = new ErrorCode(1009006004, "操作失败,原因:任务分配脚本({}) 不存在"); |
||||
|
||||
// ========== 动态表单模块 1-009-010-000 ==========
|
||||
ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动态表单不存在"); |
||||
ErrorCode FORM_FIELD_REPEAT = new ErrorCode(1009010001, "表单项({}) 和 ({}) 使用了相同的字段名({})"); |
||||
|
||||
// ========== 用户组模块 1-009-011-000 ==========
|
||||
ErrorCode USER_GROUP_NOT_EXISTS = new ErrorCode(1009011000, "用户组不存在"); |
||||
ErrorCode USER_GROUP_IS_DISABLE = new ErrorCode(1009011001, "名字为【{}】的用户组已被禁用"); |
||||
|
||||
} |
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<parent> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-module-bpm</artifactId> |
||||
<version>${revision}</version> |
||||
</parent> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<artifactId>yudao-module-bpm-base</artifactId> |
||||
|
||||
<name>${project.artifactId}</name> |
||||
<description> |
||||
bpm-base 模块,实现公用的工作流的逻辑,提供给 bpm-activiti 和 bpm-flowable 复用 |
||||
</description> |
||||
|
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-module-bpm-api</artifactId> |
||||
<version>${revision}</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-module-system-api</artifactId> |
||||
<version>${revision}</version> |
||||
</dependency> |
||||
|
||||
<!-- 业务组件 --> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-spring-boot-starter-biz-operatelog</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-spring-boot-starter-biz-data-permission</artifactId> |
||||
</dependency> |
||||
|
||||
<!-- Web 相关 --> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-spring-boot-starter-web</artifactId> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-spring-boot-starter-security</artifactId> |
||||
</dependency> |
||||
|
||||
<!-- DB 相关 --> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-spring-boot-starter-mybatis</artifactId> |
||||
</dependency> |
||||
|
||||
<!-- Test 测试相关 --> |
||||
<dependency> |
||||
<groupId>cn.iocoder.boot</groupId> |
||||
<artifactId>yudao-spring-boot-starter-test</artifactId> |
||||
</dependency> |
||||
</dependencies> |
||||
</project> |
@ -0,0 +1,79 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.*; |
||||
import cn.iocoder.yudao.module.bpm.convert.definition.BpmFormConvert; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; |
||||
import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; |
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiImplicitParam; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import org.springframework.validation.annotation.Validated; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.annotation.Resource; |
||||
import javax.validation.Valid; |
||||
import java.util.List; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
||||
|
||||
@Api(tags = "管理后台 - 动态表单") |
||||
@RestController |
||||
@RequestMapping("/bpm/form") |
||||
@Validated |
||||
public class BpmFormController { |
||||
|
||||
@Resource |
||||
private BpmFormService formService; |
||||
|
||||
@PostMapping("/create") |
||||
@ApiOperation("创建动态表单") |
||||
@PreAuthorize("@ss.hasPermission('bpm:form:create')") |
||||
public CommonResult<Long> createForm(@Valid @RequestBody BpmFormCreateReqVO createReqVO) { |
||||
return success(formService.createForm(createReqVO)); |
||||
} |
||||
|
||||
@PutMapping("/update") |
||||
@ApiOperation("更新动态表单") |
||||
@PreAuthorize("@ss.hasPermission('bpm:form:update')") |
||||
public CommonResult<Boolean> updateForm(@Valid @RequestBody BpmFormUpdateReqVO updateReqVO) { |
||||
formService.updateForm(updateReqVO); |
||||
return success(true); |
||||
} |
||||
|
||||
@DeleteMapping("/delete") |
||||
@ApiOperation("删除动态表单") |
||||
@ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) |
||||
@PreAuthorize("@ss.hasPermission('bpm:form:delete')") |
||||
public CommonResult<Boolean> deleteForm(@RequestParam("id") Long id) { |
||||
formService.deleteForm(id); |
||||
return success(true); |
||||
} |
||||
|
||||
@GetMapping("/get") |
||||
@ApiOperation("获得动态表单") |
||||
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
||||
@PreAuthorize("@ss.hasPermission('bpm:form:query')") |
||||
public CommonResult<BpmFormRespVO> getForm(@RequestParam("id") Long id) { |
||||
BpmFormDO form = formService.getForm(id); |
||||
return success(BpmFormConvert.INSTANCE.convert(form)); |
||||
} |
||||
|
||||
@GetMapping("/list-all-simple") |
||||
@ApiOperation(value = "获得动态表单的精简列表", notes = "用于表单下拉框") |
||||
public CommonResult<List<BpmFormSimpleRespVO>> getSimpleForms() { |
||||
List<BpmFormDO> list = formService.getFormList(); |
||||
return success(BpmFormConvert.INSTANCE.convertList2(list)); |
||||
} |
||||
|
||||
@GetMapping("/page") |
||||
@ApiOperation("获得动态表单分页") |
||||
@PreAuthorize("@ss.hasPermission('bpm:form:query')") |
||||
public CommonResult<PageResult<BpmFormRespVO>> getFormPage(@Valid BpmFormPageReqVO pageVO) { |
||||
PageResult<BpmFormDO> pageResult = formService.getFormPage(pageVO); |
||||
return success(BpmFormConvert.INSTANCE.convertPage(pageResult)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,85 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupCreateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupRespVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupUpdateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.convert.definition.BpmUserGroupConvert; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; |
||||
import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; |
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiImplicitParam; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import org.springframework.validation.annotation.Validated; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.annotation.Resource; |
||||
import javax.validation.Valid; |
||||
import java.util.List; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
||||
|
||||
@Api(tags = "管理后台 - 用户组") |
||||
@RestController |
||||
@RequestMapping("/bpm/user-group") |
||||
@Validated |
||||
public class BpmUserGroupController { |
||||
|
||||
@Resource |
||||
private BpmUserGroupService userGroupService; |
||||
|
||||
@PostMapping("/create") |
||||
@ApiOperation("创建用户组") |
||||
@PreAuthorize("@ss.hasPermission('bpm:user-group:create')") |
||||
public CommonResult<Long> createUserGroup(@Valid @RequestBody BpmUserGroupCreateReqVO createReqVO) { |
||||
return success(userGroupService.createUserGroup(createReqVO)); |
||||
} |
||||
|
||||
@PutMapping("/update") |
||||
@ApiOperation("更新用户组") |
||||
@PreAuthorize("@ss.hasPermission('bpm:user-group:update')") |
||||
public CommonResult<Boolean> updateUserGroup(@Valid @RequestBody BpmUserGroupUpdateReqVO updateReqVO) { |
||||
userGroupService.updateUserGroup(updateReqVO); |
||||
return success(true); |
||||
} |
||||
|
||||
@DeleteMapping("/delete") |
||||
@ApiOperation("删除用户组") |
||||
@ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) |
||||
@PreAuthorize("@ss.hasPermission('bpm:user-group:delete')") |
||||
public CommonResult<Boolean> deleteUserGroup(@RequestParam("id") Long id) { |
||||
userGroupService.deleteUserGroup(id); |
||||
return success(true); |
||||
} |
||||
|
||||
@GetMapping("/get") |
||||
@ApiOperation("获得用户组") |
||||
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
||||
@PreAuthorize("@ss.hasPermission('bpm:user-group:query')") |
||||
public CommonResult<BpmUserGroupRespVO> getUserGroup(@RequestParam("id") Long id) { |
||||
BpmUserGroupDO userGroup = userGroupService.getUserGroup(id); |
||||
return success(BpmUserGroupConvert.INSTANCE.convert(userGroup)); |
||||
} |
||||
|
||||
@GetMapping("/page") |
||||
@ApiOperation("获得用户组分页") |
||||
@PreAuthorize("@ss.hasPermission('bpm:user-group:query')") |
||||
public CommonResult<PageResult<BpmUserGroupRespVO>> getUserGroupPage(@Valid BpmUserGroupPageReqVO pageVO) { |
||||
PageResult<BpmUserGroupDO> pageResult = userGroupService.getUserGroupPage(pageVO); |
||||
return success(BpmUserGroupConvert.INSTANCE.convertPage(pageResult)); |
||||
} |
||||
|
||||
@GetMapping("/list-all-simple") |
||||
@ApiOperation(value = "获取用户组精简信息列表", notes = "只包含被开启的用户组,主要用于前端的下拉选项") |
||||
public CommonResult<List<BpmUserGroupRespVO>> getSimpleUserGroups() { |
||||
// 获用户门列表,只要开启状态的
|
||||
List<BpmUserGroupDO> list = userGroupService.getUserGroupListByStatus(CommonStatusEnum.ENABLE.getStatus()); |
||||
// 排序后,返回给前端
|
||||
return success(BpmUserGroupConvert.INSTANCE.convertList2(list)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; |
||||
|
||||
import lombok.*; |
||||
import io.swagger.annotations.*; |
||||
import javax.validation.constraints.*; |
||||
|
||||
/** |
||||
* 动态表单 Base VO,提供给添加、修改、详细的子 VO 使用 |
||||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
||||
*/ |
||||
@Data |
||||
public class BpmFormBaseVO { |
||||
|
||||
@ApiModelProperty(value = "表单名称", required = true, example = "芋道") |
||||
@NotNull(message = "表单名称不能为空") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "表单状态", required = true, notes = "参见 CommonStatusEnum 枚举", example = "1") |
||||
@NotNull(message = "表单状态不能为空") |
||||
private Integer status; |
||||
|
||||
@ApiModelProperty(value = "备注", example = "我是备注") |
||||
private String remark; |
||||
|
||||
} |
@ -0,0 +1,23 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; |
||||
|
||||
import lombok.*; |
||||
import io.swagger.annotations.*; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
import java.util.List; |
||||
|
||||
@ApiModel("管理后台 - 动态表单创建 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmFormCreateReqVO extends BpmFormBaseVO { |
||||
|
||||
@ApiModelProperty(value = "表单的配置", required = true, notes = "JSON 字符串") |
||||
@NotNull(message = "表单的配置不能为空") |
||||
private String conf; |
||||
|
||||
@ApiModelProperty(value = "表单项的数组", required = true, notes = "JSON 字符串的数组") |
||||
@NotNull(message = "表单项的数组不能为空") |
||||
private List<String> fields; |
||||
|
||||
} |
@ -0,0 +1,19 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
@ApiModel("管理后台 - 动态表单分页 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmFormPageReqVO extends PageParam { |
||||
|
||||
@ApiModelProperty(value = "表单名称", example = "芋道") |
||||
private String name; |
||||
|
||||
} |
@ -0,0 +1,33 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
import java.util.Date; |
||||
import java.util.List; |
||||
|
||||
@ApiModel("管理后台 - 动态表单 Response VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmFormRespVO extends BpmFormBaseVO { |
||||
|
||||
@ApiModelProperty(value = "表单编号", required = true, example = "1024") |
||||
private Long id; |
||||
|
||||
@ApiModelProperty(value = "表单的配置", required = true, notes = "JSON 字符串") |
||||
@NotNull(message = "表单的配置不能为空") |
||||
private String conf; |
||||
|
||||
@ApiModelProperty(value = "表单项的数组", required = true, notes = "JSON 字符串的数组") |
||||
@NotNull(message = "表单项的数组不能为空") |
||||
private List<String> fields; |
||||
|
||||
@ApiModelProperty(value = "创建时间", required = true) |
||||
private Date createTime; |
||||
|
||||
} |
@ -0,0 +1,17 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
@ApiModel("管理后台 - 流程表单精简 Response VO") |
||||
@Data |
||||
public class BpmFormSimpleRespVO { |
||||
|
||||
@ApiModelProperty(value = "表单编号", required = true, example = "1024") |
||||
private Long id; |
||||
|
||||
@ApiModelProperty(value = "表单名称", required = true, example = "芋道") |
||||
private String name; |
||||
|
||||
} |
@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; |
||||
|
||||
import lombok.*; |
||||
import io.swagger.annotations.*; |
||||
import javax.validation.constraints.*; |
||||
import java.util.List; |
||||
|
||||
@ApiModel("管理后台 - 动态表单更新 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmFormUpdateReqVO extends BpmFormBaseVO { |
||||
|
||||
@ApiModelProperty(value = "表单编号", required = true, example = "1024") |
||||
@NotNull(message = "表单编号不能为空") |
||||
private Long id; |
||||
|
||||
@ApiModelProperty(value = "表单的配置", required = true, notes = "JSON 字符串") |
||||
@NotNull(message = "表单的配置不能为空") |
||||
private String conf; |
||||
|
||||
@ApiModelProperty(value = "表单项的数组", required = true, notes = "JSON 字符串的数组") |
||||
@NotNull(message = "表单项的数组不能为空") |
||||
private List<String> fields; |
||||
|
||||
} |
@ -0,0 +1,31 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; |
||||
|
||||
import lombok.*; |
||||
import java.util.*; |
||||
import io.swagger.annotations.*; |
||||
import javax.validation.constraints.*; |
||||
|
||||
/** |
||||
* 用户组 Base VO,提供给添加、修改、详细的子 VO 使用 |
||||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
||||
*/ |
||||
@Data |
||||
public class BpmUserGroupBaseVO { |
||||
|
||||
@ApiModelProperty(value = "组名", required = true, example = "芋道") |
||||
@NotNull(message = "组名不能为空") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "描述", required = true, example = "芋道源码") |
||||
@NotNull(message = "描述不能为空") |
||||
private String description; |
||||
|
||||
@ApiModelProperty(value = "成员编号数组", required = true, example = "1,2,3") |
||||
@NotNull(message = "成员编号数组不能为空") |
||||
private Set<Long> memberUserIds; |
||||
|
||||
@ApiModelProperty(value = "状态", required = true, example = "1") |
||||
@NotNull(message = "状态不能为空") |
||||
private Integer status; |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; |
||||
|
||||
import lombok.*; |
||||
import io.swagger.annotations.*; |
||||
|
||||
@ApiModel("管理后台 - 用户组创建 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmUserGroupCreateReqVO extends BpmUserGroupBaseVO { |
||||
|
||||
} |
@ -0,0 +1,34 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
||||
import java.util.Date; |
||||
|
||||
@ApiModel("管理后台 - 用户组分页 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmUserGroupPageReqVO extends PageParam { |
||||
|
||||
@ApiModelProperty(value = "组名", example = "芋道") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "状态", example = "1") |
||||
private Integer status; |
||||
|
||||
@DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
@ApiModelProperty(value = "开始创建时间") |
||||
private Date beginCreateTime; |
||||
|
||||
@DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
@ApiModelProperty(value = "结束创建时间") |
||||
private Date endCreateTime; |
||||
|
||||
} |
@ -0,0 +1,19 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; |
||||
|
||||
import lombok.*; |
||||
import java.util.*; |
||||
import io.swagger.annotations.*; |
||||
|
||||
@ApiModel("管理后台 - 用户组 Response VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmUserGroupRespVO extends BpmUserGroupBaseVO { |
||||
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024") |
||||
private Long id; |
||||
|
||||
@ApiModelProperty(value = "创建时间", required = true) |
||||
private Date createTime; |
||||
|
||||
} |
@ -0,0 +1,21 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
@ApiModel("管理后台 - 用户组精简信息 Response VO") |
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
public class BpmUserGroupSimpleRespVO { |
||||
|
||||
@ApiModelProperty(value = "用户组编号", required = true, example = "1024") |
||||
private Long id; |
||||
|
||||
@ApiModelProperty(value = "用户组名字", required = true, example = "芋道") |
||||
private String name; |
||||
|
||||
} |
@ -0,0 +1,17 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group; |
||||
|
||||
import lombok.*; |
||||
import io.swagger.annotations.*; |
||||
import javax.validation.constraints.*; |
||||
|
||||
@ApiModel("管理后台 - 用户组更新 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmUserGroupUpdateReqVO extends BpmUserGroupBaseVO { |
||||
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024") |
||||
@NotNull(message = "编号不能为空") |
||||
private Long id; |
||||
|
||||
} |
@ -0,0 +1,22 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
import org.springframework.web.multipart.MultipartFile; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
|
||||
@ApiModel(value = "管理后台 - 流程模型的导入 Request VO", description = "相比流程模型的新建来说,只是多了一个 bpmnFile 文件") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmModeImportReqVO extends BpmModelCreateReqVO { |
||||
|
||||
@ApiModelProperty(value = "BPMN 文件", required = true) |
||||
@NotNull(message = "BPMN 文件不能为空") |
||||
private MultipartFile bpmnFile; |
||||
|
||||
} |
@ -0,0 +1,41 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; |
||||
|
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
|
||||
/** |
||||
* 流程模型 Base VO,提供给添加、修改、详细的子 VO 使用 |
||||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
||||
*/ |
||||
@Data |
||||
public class BpmModelBaseVO { |
||||
|
||||
@ApiModelProperty(value = "流程标识", required = true, example = "process_yudao") |
||||
@NotEmpty(message = "流程标识不能为空") |
||||
private String key; |
||||
|
||||
@ApiModelProperty(value = "流程名称", required = true, example = "芋道") |
||||
@NotEmpty(message = "流程名称不能为空") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "流程描述", example = "我是描述") |
||||
private String description; |
||||
|
||||
@ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1") |
||||
@NotEmpty(message = "流程分类不能为空") |
||||
private String category; |
||||
|
||||
@ApiModelProperty(value = "表单类型", notes = "参见 bpm_model_form_type 数据字典", example = "1") |
||||
private Integer formType; |
||||
@ApiModelProperty(value = "表单编号", example = "1024", notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private Long formId; |
||||
@ApiModelProperty(value = "自定义表单的提交路径,使用 Vue 的路由地址", example = "/bpm/oa/leave/create", |
||||
notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formCustomCreatePath; |
||||
@ApiModelProperty(value = "自定义表单的查看路径,使用 Vue 的路由地址", example = "/bpm/oa/leave/view", |
||||
notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formCustomViewPath; |
||||
|
||||
} |
@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
|
||||
@ApiModel("管理后台 - 流程模型的创建 Request VO") |
||||
@Data |
||||
public class BpmModelCreateReqVO { |
||||
|
||||
@ApiModelProperty(value = "流程标识", required = true, example = "process_yudao") |
||||
@NotEmpty(message = "流程标识不能为空") |
||||
private String key; |
||||
|
||||
@ApiModelProperty(value = "流程名称", required = true, example = "芋道") |
||||
@NotEmpty(message = "流程名称不能为空") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "流程描述", example = "我是描述") |
||||
private String description; |
||||
|
||||
} |
@ -0,0 +1,49 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; |
||||
|
||||
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 BpmModelPageItemRespVO extends BpmModelBaseVO { |
||||
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "表单名字", example = "请假表单") |
||||
private String formName; |
||||
|
||||
@ApiModelProperty(value = "创建时间", required = true) |
||||
private Date createTime; |
||||
|
||||
/** |
||||
* 最新部署的流程定义 |
||||
*/ |
||||
private ProcessDefinition processDefinition; |
||||
|
||||
@ApiModel("流程定义") |
||||
@Data |
||||
public static class ProcessDefinition { |
||||
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "版本", required = true, example = "1") |
||||
private Integer version; |
||||
|
||||
@ApiModelProperty(value = "部署时间", required = true) |
||||
private Date deploymentTime; |
||||
|
||||
@ApiModelProperty(value = "中断状态", required = true, example = "1", notes = "参见 SuspensionState 枚举") |
||||
private Integer suspensionState; |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
|
||||
@ApiModel("管理后台 - 流程模型分页 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmModelPageReqVO extends PageParam { |
||||
|
||||
@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; |
||||
|
||||
} |
@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
import java.util.Date; |
||||
|
||||
@ApiModel("管理后台 - 流程模型的创建 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmModelRespVO extends BpmModelBaseVO { |
||||
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "BPMN XML", required = true) |
||||
private String bpmnXml; |
||||
|
||||
@ApiModelProperty(value = "创建时间", required = true) |
||||
private Date createTime; |
||||
|
||||
} |
@ -0,0 +1,40 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
|
||||
@ApiModel("管理后台 - 流程模型的更新 Request VO") |
||||
@Data |
||||
public class BpmModelUpdateReqVO { |
||||
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024") |
||||
@NotEmpty(message = "编号不能为空") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "流程名称", example = "芋道") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "流程描述", example = "我是描述") |
||||
private String description; |
||||
|
||||
@ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1") |
||||
private String category; |
||||
|
||||
@ApiModelProperty(value = "BPMN XML", required = true) |
||||
private String bpmnXml; |
||||
|
||||
@ApiModelProperty(value = "表单类型", notes = "参见 bpm_model_form_type 数据字典", example = "1") |
||||
private Integer formType; |
||||
@ApiModelProperty(value = "表单编号", example = "1024", notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private Long formId; |
||||
@ApiModelProperty(value = "自定义表单的提交路径,使用 Vue 的路由地址", example = "/bpm/oa/leave/create", |
||||
notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formCustomCreatePath; |
||||
@ApiModelProperty(value = "自定义表单的查看路径,使用 Vue 的路由地址", example = "/bpm/oa/leave/view", |
||||
notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formCustomViewPath; |
||||
|
||||
} |
@ -0,0 +1,21 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
|
||||
@ApiModel("管理后台 - 流程模型更新状态 Request VO") |
||||
@Data |
||||
public class BpmModelUpdateStateReqVO { |
||||
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024") |
||||
@NotNull(message = "编号不能为空") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 SuspensionState 枚举") |
||||
@NotNull(message = "状态不能为空") |
||||
private Integer state; |
||||
|
||||
} |
@ -0,0 +1,19 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
@ApiModel("管理后台 - 流程定义列表 Request VO") |
||||
@Data |
||||
@ToString(callSuper = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class BpmProcessDefinitionListReqVO extends PageParam { |
||||
|
||||
@ApiModelProperty(value = "中断状态", example = "1", notes = "参见 SuspensionState 枚举") |
||||
private Integer suspensionState; |
||||
|
||||
} |
@ -0,0 +1,23 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.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 BpmProcessDefinitionRespVO { |
||||
|
||||
@ApiModelProperty(value = "表单名字", example = "请假表单") |
||||
private String formName; |
||||
|
||||
@ApiModelProperty(value = "部署时间", required = true) |
||||
private Date deploymentTime; |
||||
|
||||
} |
@ -0,0 +1,19 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
@ApiModel("管理后台 - 流程定义分页 Request VO") |
||||
@Data |
||||
@ToString(callSuper = true) |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class BpmProcessDefinitionPageReqVO extends PageParam { |
||||
|
||||
@ApiModelProperty(value = "标识", example = "process1641042089407", notes = "精准匹配") |
||||
private String key; |
||||
|
||||
} |
@ -0,0 +1,52 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
import javax.validation.constraints.NotNull; |
||||
import java.util.List; |
||||
|
||||
@ApiModel("管理后台 - 流程定义 Response VO") |
||||
@Data |
||||
public class BpmProcessDefinitionRespVO { |
||||
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "版本", required = true, example = "1") |
||||
private Integer version; |
||||
|
||||
@ApiModelProperty(value = "流程名称", required = true, example = "芋道") |
||||
@NotEmpty(message = "流程名称不能为空") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "流程描述", example = "我是描述") |
||||
private String description; |
||||
|
||||
@ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1") |
||||
@NotEmpty(message = "流程分类不能为空") |
||||
private String category; |
||||
|
||||
@ApiModelProperty(value = "表单类型", notes = "参见 bpm_model_form_type 数据字典", example = "1") |
||||
private Integer formType; |
||||
@ApiModelProperty(value = "表单编号", example = "1024", notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private Long formId; |
||||
@ApiModelProperty(value = "表单的配置", required = true, |
||||
notes = "JSON 字符串。在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formConf; |
||||
@ApiModelProperty(value = "表单项的数组", required = true, |
||||
notes = "JSON 字符串的数组。在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private List<String> formFields; |
||||
@ApiModelProperty(value = "自定义表单的提交路径,使用 Vue 的路由地址", example = "/bpm/oa/leave/create", |
||||
notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formCustomCreatePath; |
||||
@ApiModelProperty(value = "自定义表单的查看路径,使用 Vue 的路由地址", example = "/bpm/oa/leave/view", |
||||
notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formCustomViewPath; |
||||
|
||||
@ApiModelProperty(value = "中断状态", required = true, example = "1", notes = "参见 SuspensionState 枚举") |
||||
private Integer suspensionState; |
||||
|
||||
} |
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule; |
||||
|
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
import javax.validation.constraints.NotNull; |
||||
import java.util.Set; |
||||
|
||||
/** |
||||
* 流程任务分配规则 Base VO,提供给添加、修改、详细的子 VO 使用 |
||||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
||||
*/ |
||||
@Data |
||||
public class BpmTaskAssignRuleBaseVO { |
||||
|
||||
@ApiModelProperty(value = "规则类型", required = true, example = "bpm_task_assign_rule_type") |
||||
@NotNull(message = "规则类型不能为空") |
||||
private Integer type; |
||||
|
||||
@ApiModelProperty(value = "规则值数组", required = true, example = "1,2,3") |
||||
@NotNull(message = "规则值数组不能为空") |
||||
private Set<Long> options; |
||||
|
||||
} |
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
|
||||
@ApiModel("管理后台 - 流程任务分配规则的创建 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmTaskAssignRuleCreateReqVO extends BpmTaskAssignRuleBaseVO { |
||||
|
||||
@ApiModelProperty(value = "流程模型的编号", required = true, example = "1024") |
||||
@NotEmpty(message = "流程模型的编号不能为空") |
||||
private String modelId; |
||||
|
||||
@ApiModelProperty(value = "流程任务定义的编号", required = true, example = "2048") |
||||
@NotEmpty(message = "流程任务定义的编号不能为空") |
||||
private String taskDefinitionKey; |
||||
|
||||
} |
@ -0,0 +1,29 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
@ApiModel("管理后台 - 流程任务分配规则的 Response VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmTaskAssignRuleRespVO extends BpmTaskAssignRuleBaseVO { |
||||
|
||||
@ApiModelProperty(value = "任务分配规则的编号", required = true, example = "1024") |
||||
private Long id; |
||||
|
||||
@ApiModelProperty(value = "流程模型的编号", required = true, example = "2048") |
||||
private String modelId; |
||||
|
||||
@ApiModelProperty(value = "流程定义的编号", required = true, example = "4096") |
||||
private String processDefinitionId; |
||||
|
||||
@ApiModelProperty(value = "流程任务定义的编号", required = true, example = "2048") |
||||
private String taskDefinitionKey; |
||||
@ApiModelProperty(value = "流程任务定义的名字", required = true, example = "关注芋道") |
||||
private String taskDefinitionName; |
||||
|
||||
} |
@ -0,0 +1,21 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.rule; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
|
||||
@ApiModel("管理后台 - 流程任务分配规则的更新 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmTaskAssignRuleUpdateReqVO extends BpmTaskAssignRuleBaseVO { |
||||
|
||||
@ApiModelProperty(value = "任务分配规则的编号", required = true, example = "1024") |
||||
@NotNull(message = "任务分配规则的编号不能为空") |
||||
private Long id; |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
### 请求 /bpm/oa/leave/create 接口 => 成功 |
||||
POST {{baseUrl}}/bpm/oa/leave/create |
||||
Content-Type: application/json |
||||
tenant-id: 1 |
||||
Authorization: Bearer {{token}} |
||||
|
||||
{ |
||||
"startTime": "2022-03-01", |
||||
"endTime": "2022-03-05", |
||||
"type": 1, |
||||
"reason": "我要请假啦啦啦!" |
||||
} |
@ -0,0 +1,63 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveRespVO; |
||||
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; |
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import cn.iocoder.yudao.module.bpm.service.oa.BpmOALeaveService; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiImplicitParam; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
||||
import org.springframework.validation.annotation.Validated; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import javax.annotation.Resource; |
||||
import javax.validation.Valid; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
||||
|
||||
/** |
||||
* OA 请假申请 Controller,用于演示自己存储数据,接入工作流的例子 |
||||
* |
||||
* @author jason |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Api(tags = "管理后台 - OA 请假申请") |
||||
@RestController |
||||
@RequestMapping("/bpm/oa/leave") |
||||
@Validated |
||||
public class BpmOALeaveController { |
||||
|
||||
@Resource |
||||
private BpmOALeaveService leaveService; |
||||
|
||||
@PostMapping("/create") |
||||
@PreAuthorize("@ss.hasPermission('bpm:oa-leave:create')") |
||||
@ApiOperation("创建请求申请") |
||||
public CommonResult<Long> createLeave(@Valid @RequestBody BpmOALeaveCreateReqVO createReqVO) { |
||||
return success(leaveService.createLeave(getLoginUserId(), createReqVO)); |
||||
} |
||||
|
||||
@GetMapping("/get") |
||||
@PreAuthorize("@ss.hasPermission('bpm:oa-leave:query')") |
||||
@ApiOperation("获得请假申请") |
||||
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
||||
public CommonResult<BpmOALeaveRespVO> getLeave(@RequestParam("id") Long id) { |
||||
BpmOALeaveDO leave = leaveService.getLeave(id); |
||||
return success(BpmOALeaveConvert.INSTANCE.convert(leave)); |
||||
} |
||||
|
||||
@GetMapping("/page") |
||||
@PreAuthorize("@ss.hasPermission('bpm:oa-leave:query')") |
||||
@ApiOperation("获得请假申请分页") |
||||
public CommonResult<PageResult<BpmOALeaveRespVO>> getLeavePage(@Valid BpmOALeavePageReqVO pageVO) { |
||||
PageResult<BpmOALeaveDO> pageResult = leaveService.getLeavePage(getLoginUserId(), pageVO); |
||||
return success(BpmOALeaveConvert.INSTANCE.convertPage(pageResult)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,5 @@
|
||||
/** |
||||
* OA 示例,用于演示外部业务接入 BPM 工作流的示例 |
||||
* 一般的接入方式,只需要调用 接口,后续 Admin 用户在管理后台的【待办事务】进行审批 |
||||
*/ |
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa; |
@ -0,0 +1,33 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo; |
||||
|
||||
import lombok.*; |
||||
import java.util.*; |
||||
import io.swagger.annotations.*; |
||||
import javax.validation.constraints.*; |
||||
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
||||
|
||||
/** |
||||
* 请假申请 Base VO,提供给添加、修改、详细的子 VO 使用 |
||||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
||||
*/ |
||||
@Data |
||||
public class BpmOALeaveBaseVO { |
||||
|
||||
@ApiModelProperty(value = "请假的开始时间", required = true) |
||||
@NotNull(message = "开始时间不能为空") |
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
private Date startTime; |
||||
@ApiModelProperty(value = "请假的结束时间", required = true) |
||||
@NotNull(message = "结束时间不能为空") |
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
private Date endTime; |
||||
|
||||
@ApiModelProperty(value = "请假类型", required = true, example = "1", notes = "参见 bpm_oa_type 枚举") |
||||
private Integer type; |
||||
|
||||
@ApiModelProperty(value = "原因", required = true, example = "阅读芋道源码") |
||||
private String reason; |
||||
|
||||
} |
@ -0,0 +1,21 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
import javax.validation.constraints.AssertTrue; |
||||
|
||||
@ApiModel("管理后台 - 请假申请创建 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmOALeaveCreateReqVO extends BpmOALeaveBaseVO { |
||||
|
||||
@AssertTrue(message = "结束时间,需要在开始时间之后") |
||||
public boolean isEndTimeValid() { |
||||
return !getEndTime().before(getStartTime()); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,34 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo; |
||||
|
||||
import lombok.*; |
||||
import java.util.*; |
||||
import io.swagger.annotations.*; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
||||
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
||||
|
||||
@ApiModel("管理后台 - 请假申请分页 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmOALeavePageReqVO extends PageParam { |
||||
|
||||
@ApiModelProperty(value = "状态", example = "1", notes = "参见 bpm_process_instance_result 枚举") |
||||
private Integer result; |
||||
|
||||
@ApiModelProperty(value = "请假类型", example = "1", notes = "参见 bpm_oa_type") |
||||
private Integer type; |
||||
|
||||
@ApiModelProperty(value = "原因", example = "阅读芋道源码", notes = "模糊匹配") |
||||
private String reason; |
||||
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
@ApiModelProperty(value = "开始申请时间") |
||||
private Date beginCreateTime; |
||||
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
@ApiModelProperty(value = "结束申请时间") |
||||
private Date endCreateTime; |
||||
|
||||
} |
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo; |
||||
|
||||
import lombok.*; |
||||
import io.swagger.annotations.*; |
||||
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
import java.util.Date; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
||||
|
||||
@ApiModel("管理后台 - 请假申请 Response VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmOALeaveRespVO extends BpmOALeaveBaseVO { |
||||
|
||||
@ApiModelProperty(value = "请假表单主键", required = true, example = "1024") |
||||
private Long id; |
||||
|
||||
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 bpm_process_instance_result 枚举") |
||||
private Integer result; |
||||
|
||||
@ApiModelProperty(value = "申请时间", required = true) |
||||
@NotNull(message = "申请时间不能为空") |
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
private Date createTime; |
||||
|
||||
@ApiModelProperty(value = "流程id") |
||||
private String processInstanceId; |
||||
|
||||
} |
@ -0,0 +1 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task; |
@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.Date; |
||||
|
||||
@ApiModel("管理后台 - 流程活动的 Response VO") |
||||
@Data |
||||
public class BpmActivityRespVO { |
||||
|
||||
@ApiModelProperty(value = "流程活动的标识", required = true, example = "1024") |
||||
private String key; |
||||
@ApiModelProperty(value = "流程活动的类型", required = true, example = "StartEvent") |
||||
private String type; |
||||
|
||||
@ApiModelProperty(value = "流程活动的开始时间", required = true) |
||||
private Date startTime; |
||||
@ApiModelProperty(value = "流程活动的结束时间", required = true) |
||||
private Date endTime; |
||||
|
||||
@ApiModelProperty(value = "关联的流程任务的编号", example = "2048", notes = "关联的流程任务,只有 UserTask 等类型才有") |
||||
private String taskId; |
||||
|
||||
} |
@ -0,0 +1,23 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
import javax.validation.constraints.NotNull; |
||||
import java.util.Map; |
||||
|
||||
@ApiModel("管理后台 - 流程实例的取消 Request VO") |
||||
@Data |
||||
public class BpmProcessInstanceCancelReqVO { |
||||
|
||||
@ApiModelProperty(value = "流程实例的编号", required = true, example = "1024") |
||||
@NotEmpty(message = "流程实例的编号不能为空") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "取消原因", required = true, example = "不请假了!") |
||||
@NotEmpty(message = "取消原因不能为空") |
||||
private String reason; |
||||
|
||||
} |
@ -0,0 +1,21 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
import java.util.Map; |
||||
|
||||
@ApiModel("管理后台 - 流程实例的创建 Request VO") |
||||
@Data |
||||
public class BpmProcessInstanceCreateReqVO { |
||||
|
||||
@ApiModelProperty(value = "流程定义的编号", required = true, example = "1024") |
||||
@NotEmpty(message = "流程定义编号不能为空") |
||||
private String processDefinitionId; |
||||
|
||||
@ApiModelProperty(value = "变量实例") |
||||
private Map<String, Object> variables; |
||||
|
||||
} |
@ -0,0 +1,44 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
||||
import java.util.Date; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
||||
|
||||
@ApiModel("管理后台 - 流程实例的分页 Item Response VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmProcessInstanceMyPageReqVO extends PageParam { |
||||
|
||||
@ApiModelProperty(value = "流程名称", example = "芋道") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "流程定义的编号", example = "2048") |
||||
private String processDefinitionId; |
||||
|
||||
@ApiModelProperty(value = "流程实例的状态", notes = "参见 bpm_process_instance_status", example = "1") |
||||
private Integer status; |
||||
|
||||
@ApiModelProperty(value = "流程实例的结果", notes = "参见 bpm_process_instance_result", example = "2") |
||||
private Integer result; |
||||
|
||||
@ApiModelProperty(value = "流程分类", notes = "参见 bpm_model_category 数据字典", example = "1") |
||||
private String category; |
||||
|
||||
@ApiModelProperty(value = "开始的创建时间") |
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
private Date beginCreateTime; |
||||
|
||||
@ApiModelProperty(value = "结束的创建时间") |
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
private Date endCreateTime; |
||||
|
||||
} |
@ -0,0 +1,55 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.Date; |
||||
import java.util.List; |
||||
|
||||
@ApiModel("管理后台 - 流程实例的分页 Item Response VO") |
||||
@Data |
||||
public class BpmProcessInstancePageItemRespVO { |
||||
|
||||
@ApiModelProperty(value = "流程实例的编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "流程名称", required = true, example = "芋道") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "流程定义的编号", required = true, example = "2048") |
||||
private String processDefinitionId; |
||||
|
||||
@ApiModelProperty(value = "流程分类", required = true, notes = "参见 bpm_model_category 数据字典", example = "1") |
||||
private String category; |
||||
|
||||
@ApiModelProperty(value = "流程实例的状态", required = true, notes = "参见 bpm_process_instance_status", example = "1") |
||||
private Integer status; |
||||
|
||||
@ApiModelProperty(value = "流程实例的结果", required = true, notes = "参见 bpm_process_instance_result", example = "2") |
||||
private Integer result; |
||||
|
||||
@ApiModelProperty(value = "提交时间", required = true) |
||||
private Date createTime; |
||||
|
||||
@ApiModelProperty(value = "结束时间", required = true) |
||||
private Date endTime; |
||||
|
||||
/** |
||||
* 当前任务 |
||||
*/ |
||||
private List<Task> tasks; |
||||
|
||||
@ApiModel("流程任务") |
||||
@Data |
||||
public static class Task { |
||||
|
||||
@ApiModelProperty(value = "流程任务的编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "任务名称", required = true, example = "芋道") |
||||
private String name; |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,97 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.Date; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
@ApiModel("管理后台 - 流程实例的 Response VO") |
||||
@Data |
||||
public class BpmProcessInstanceRespVO { |
||||
|
||||
@ApiModelProperty(value = "流程实例的编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "流程名称", required = true, example = "芋道") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "流程分类", required = true, notes = "参见 bpm_model_category 数据字典", example = "1") |
||||
private String category; |
||||
|
||||
@ApiModelProperty(value = "流程实例的状态", required = true, notes = "参见 bpm_process_instance_status", example = "1") |
||||
private Integer status; |
||||
|
||||
@ApiModelProperty(value = "流程实例的结果", required = true, notes = "参见 bpm_process_instance_result", example = "2") |
||||
private Integer result; |
||||
|
||||
@ApiModelProperty(value = "提交时间", required = true) |
||||
private Date createTime; |
||||
|
||||
@ApiModelProperty(value = "结束时间", required = true) |
||||
private Date endTime; |
||||
|
||||
@ApiModelProperty(value = "提交的表单值", required = true) |
||||
private Map<String, Object> formVariables; |
||||
|
||||
@ApiModelProperty(value = "业务的唯一标识", example = "1", notes = "例如说,请假申请的编号") |
||||
private String businessKey; |
||||
|
||||
/** |
||||
* 发起流程的用户 |
||||
*/ |
||||
private User startUser; |
||||
|
||||
/** |
||||
* 流程定义 |
||||
*/ |
||||
private ProcessDefinition processDefinition; |
||||
|
||||
@ApiModel("用户信息") |
||||
@Data |
||||
public static class User { |
||||
|
||||
@ApiModelProperty(value = "用户编号", required = true, example = "1") |
||||
private Long id; |
||||
@ApiModelProperty(value = "用户昵称", required = true, example = "芋艿") |
||||
private String nickname; |
||||
|
||||
@ApiModelProperty(value = "部门编号", required = true, example = "1") |
||||
private Long deptId; |
||||
@ApiModelProperty(value = "部门名称", required = true, example = "研发部") |
||||
private String deptName; |
||||
|
||||
} |
||||
|
||||
@ApiModel("流程定义信息") |
||||
@Data |
||||
public static class ProcessDefinition { |
||||
|
||||
@ApiModelProperty(value = "编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "表单类型", notes = "参见 bpm_model_form_type 数据字典", example = "1") |
||||
private Integer formType; |
||||
@ApiModelProperty(value = "表单编号", example = "1024", notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private Long formId; |
||||
@ApiModelProperty(value = "表单的配置", required = true, |
||||
notes = "JSON 字符串。在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formConf; |
||||
@ApiModelProperty(value = "表单项的数组", required = true, |
||||
notes = "JSON 字符串的数组。在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private List<String> formFields; |
||||
@ApiModelProperty(value = "自定义表单的提交路径,使用 Vue 的路由地址", example = "/bpm/oa/leave/create", |
||||
notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formCustomCreatePath; |
||||
@ApiModelProperty(value = "自定义表单的查看路径,使用 Vue 的路由地址", example = "/bpm/oa/leave/view", |
||||
notes = "在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空") |
||||
private String formCustomViewPath; |
||||
|
||||
@ApiModelProperty(value = "BPMN XML", required = true) |
||||
private String bpmnXml; |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
import javax.validation.constraints.NotNull; |
||||
import java.util.Map; |
||||
|
||||
@ApiModel("管理后台 - 通过流程任务的 Request VO") |
||||
@Data |
||||
public class BpmTaskApproveReqVO { |
||||
|
||||
@ApiModelProperty(value = "任务编号", required = true, example = "1024") |
||||
@NotEmpty(message = "任务编号不能为空") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "审批意见", required = true, example = "不错不错!") |
||||
@NotEmpty(message = "审批意见不能为空") |
||||
private String comment; |
||||
|
||||
} |
@ -0,0 +1,27 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
import java.util.Date; |
||||
|
||||
@ApiModel("管理后台 - 流程任务的 Done 已完成的分页项 Response VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmTaskDonePageItemRespVO extends BpmTaskTodoPageItemRespVO { |
||||
|
||||
@ApiModelProperty(value = "结束时间", required = true) |
||||
private Date endTime; |
||||
@ApiModelProperty(value = "持续时间", required = true, example = "1000") |
||||
private Long durationInMillis; |
||||
|
||||
@ApiModelProperty(value = "任务结果", required = true, notes = "参见 bpm_process_instance_result", example = "2") |
||||
private Integer result; |
||||
@ApiModelProperty(value = "审批建议", required = true, example = "不请假了!") |
||||
private String comment; |
||||
|
||||
} |
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
||||
import java.util.Date; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
||||
|
||||
@ApiModel("管理后台 - 流程任务的 Done 已办的分页 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmTaskDonePageReqVO extends PageParam { |
||||
|
||||
@ApiModelProperty(value = "流程任务名", example = "芋道") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "开始的创建收间") |
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
private Date beginCreateTime; |
||||
|
||||
@ApiModelProperty(value = "结束的创建时间") |
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
private Date endCreateTime; |
||||
|
||||
} |
@ -0,0 +1,21 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
|
||||
@ApiModel("管理后台 - 不通过流程任务的 Request VO") |
||||
@Data |
||||
public class BpmTaskRejectReqVO { |
||||
|
||||
@ApiModelProperty(value = "任务编号", required = true, example = "1024") |
||||
@NotEmpty(message = "任务编号不能为空") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "审批意见", required = true, example = "不错不错!") |
||||
@NotEmpty(message = "审批意见不能为空") |
||||
private String comment; |
||||
|
||||
} |
@ -0,0 +1,39 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
@ApiModel("管理后台 - 流程任务的 Response VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmTaskRespVO extends BpmTaskDonePageItemRespVO { |
||||
|
||||
@ApiModelProperty(value = "任务定义的标识", required = true, example = "user-001") |
||||
private String definitionKey; |
||||
|
||||
/** |
||||
* 审核的用户信息 |
||||
*/ |
||||
private User assigneeUser; |
||||
|
||||
@ApiModel("用户信息") |
||||
@Data |
||||
public static class User { |
||||
|
||||
@ApiModelProperty(value = "用户编号", required = true, example = "1") |
||||
private Long id; |
||||
@ApiModelProperty(value = "用户昵称", required = true, example = "芋艿") |
||||
private String nickname; |
||||
|
||||
@ApiModelProperty(value = "部门编号", required = true, example = "1") |
||||
private Long deptId; |
||||
@ApiModelProperty(value = "部门名称", required = true, example = "研发部") |
||||
private String deptName; |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,54 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.util.Date; |
||||
|
||||
@ApiModel("管理后台 - 流程任务的 Running 进行中的分页项 Response VO") |
||||
@Data |
||||
public class BpmTaskTodoPageItemRespVO { |
||||
|
||||
@ApiModelProperty(value = "任务编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "任务名字", required = true, example = "芋道") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "接收时间", required = true) |
||||
private Date claimTime; |
||||
|
||||
@ApiModelProperty(value = "创建时间", required = true) |
||||
private Date createTime; |
||||
|
||||
@ApiModelProperty(value = "激活状态", required = true, example = "1", notes = "参见 SuspensionState 枚举") |
||||
private Integer suspensionState; |
||||
|
||||
/** |
||||
* 所属流程实例 |
||||
*/ |
||||
private ProcessInstance processInstance; |
||||
|
||||
@Data |
||||
@ApiModel("流程实例") |
||||
public static class ProcessInstance { |
||||
|
||||
@ApiModelProperty(value = "流程实例编号", required = true, example = "1024") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "流程实例名称", required = true, example = "芋道") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "发起人的用户编号", required = true, example = "1024") |
||||
private Long startUserId; |
||||
|
||||
@ApiModelProperty(value = "发起人的用户昵称", required = true, example = "芋艿") |
||||
private String startUserNickname; |
||||
|
||||
@ApiModelProperty(value = "流程定义的编号", required = true, example = "2048") |
||||
private String processDefinitionId; |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam; |
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
||||
import java.util.Date; |
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
||||
|
||||
@ApiModel("管理后台 - 流程任务的 TODO 待办的分页 Request VO") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmTaskTodoPageReqVO extends PageParam { |
||||
|
||||
@ApiModelProperty(value = "流程任务名", example = "芋道") |
||||
private String name; |
||||
|
||||
@ApiModelProperty(value = "开始的创建收间") |
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
private Date beginCreateTime; |
||||
|
||||
@ApiModelProperty(value = "结束的创建时间") |
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
||||
private Date endCreateTime; |
||||
|
||||
} |
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
||||
|
||||
import io.swagger.annotations.ApiModel; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
import net.bytebuddy.implementation.bind.annotation.Empty; |
||||
|
||||
import javax.validation.constraints.NotEmpty; |
||||
import javax.validation.constraints.NotNull; |
||||
|
||||
@ApiModel("管理后台 - 流程任务的更新负责人的 Request VO") |
||||
@Data |
||||
public class BpmTaskUpdateAssigneeReqVO { |
||||
|
||||
@ApiModelProperty(value = "任务编号", required = true, example = "1024") |
||||
@NotEmpty(message = "任务编号不能为空") |
||||
private String id; |
||||
|
||||
@ApiModelProperty(value = "新审批人的用户编号", required = true, example = "2048") |
||||
@NotNull(message = "新审批人的用户编号不能为空") |
||||
private Long assigneeUserId; |
||||
|
||||
} |
@ -0,0 +1,4 @@
|
||||
/** |
||||
* 占位 |
||||
*/ |
||||
package cn.iocoder.yudao.module.bpm.controller.app; |
@ -0,0 +1,6 @@
|
||||
/** |
||||
* 提供 RESTful API 给前端: |
||||
* 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 |
||||
* 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 |
||||
*/ |
||||
package cn.iocoder.yudao.module.bpm.controller; |
@ -0,0 +1,34 @@
|
||||
package cn.iocoder.yudao.module.bpm.convert.definition; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormCreateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormRespVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormSimpleRespVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormUpdateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import org.mapstruct.Mapper; |
||||
import org.mapstruct.factory.Mappers; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 动态表单 Convert |
||||
* |
||||
* @author 芋艿 |
||||
*/ |
||||
@Mapper |
||||
public interface BpmFormConvert { |
||||
|
||||
BpmFormConvert INSTANCE = Mappers.getMapper(BpmFormConvert.class); |
||||
|
||||
BpmFormDO convert(BpmFormCreateReqVO bean); |
||||
|
||||
BpmFormDO convert(BpmFormUpdateReqVO bean); |
||||
|
||||
BpmFormRespVO convert(BpmFormDO bean); |
||||
|
||||
List<BpmFormSimpleRespVO> convertList2(List<BpmFormDO> list); |
||||
|
||||
PageResult<BpmFormRespVO> convertPage(PageResult<BpmFormDO> page); |
||||
|
||||
} |
@ -0,0 +1,38 @@
|
||||
package cn.iocoder.yudao.module.bpm.convert.definition; |
||||
|
||||
import java.util.*; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupCreateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupRespVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupUpdateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
|
||||
import org.mapstruct.Mapper; |
||||
import org.mapstruct.Named; |
||||
import org.mapstruct.factory.Mappers; |
||||
|
||||
/** |
||||
* 用户组 Convert |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Mapper |
||||
public interface BpmUserGroupConvert { |
||||
|
||||
BpmUserGroupConvert INSTANCE = Mappers.getMapper(BpmUserGroupConvert.class); |
||||
|
||||
BpmUserGroupDO convert(BpmUserGroupCreateReqVO bean); |
||||
|
||||
BpmUserGroupDO convert(BpmUserGroupUpdateReqVO bean); |
||||
|
||||
BpmUserGroupRespVO convert(BpmUserGroupDO bean); |
||||
|
||||
List<BpmUserGroupRespVO> convertList(List<BpmUserGroupDO> list); |
||||
|
||||
PageResult<BpmUserGroupRespVO> convertPage(PageResult<BpmUserGroupDO> page); |
||||
|
||||
@Named("convertList2") |
||||
List<BpmUserGroupRespVO> convertList2(List<BpmUserGroupDO> list); |
||||
|
||||
} |
@ -0,0 +1,16 @@
|
||||
package cn.iocoder.yudao.module.bpm.convert.message; |
||||
|
||||
import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO; |
||||
import org.mapstruct.Mapper; |
||||
import org.mapstruct.factory.Mappers; |
||||
|
||||
import java.util.Map; |
||||
|
||||
@Mapper |
||||
public interface BpmMessageConvert { |
||||
|
||||
BpmMessageConvert INSTANCE = Mappers.getMapper(BpmMessageConvert.class); |
||||
|
||||
SmsSendSingleToUserReqDTO convert(Long userId, String templateCode, Map<String, Object> templateParams); |
||||
|
||||
} |
@ -0,0 +1,30 @@
|
||||
package cn.iocoder.yudao.module.bpm.convert.oa; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveRespVO; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import org.mapstruct.Mapper; |
||||
import org.mapstruct.factory.Mappers; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 请假申请 Convert |
||||
* |
||||
* @author 芋艿 |
||||
*/ |
||||
@Mapper |
||||
public interface BpmOALeaveConvert { |
||||
|
||||
BpmOALeaveConvert INSTANCE = Mappers.getMapper(BpmOALeaveConvert.class); |
||||
|
||||
BpmOALeaveDO convert(BpmOALeaveCreateReqVO bean); |
||||
|
||||
BpmOALeaveRespVO convert(BpmOALeaveDO bean); |
||||
|
||||
List<BpmOALeaveRespVO> convertList(List<BpmOALeaveDO> list); |
||||
|
||||
PageResult<BpmOALeaveRespVO> convertPage(PageResult<BpmOALeaveDO> page); |
||||
|
||||
} |
@ -0,0 +1 @@
|
||||
package cn.iocoder.yudao.module.bpm.convert.task; |
@ -0,0 +1,57 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; |
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
||||
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 java.util.List; |
||||
|
||||
/** |
||||
* 工作流的表单定义 |
||||
* 用于工作流的申请表单,需要动态配置的场景 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@TableName(value = "bpm_form", autoResultMap = true) |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
@Builder |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
public class BpmFormDO extends BaseDO { |
||||
|
||||
/** |
||||
* 编号 |
||||
*/ |
||||
@TableId |
||||
private Long id; |
||||
/** |
||||
* 表单名 |
||||
*/ |
||||
private String name; |
||||
/** |
||||
* 状态 |
||||
*/ |
||||
private Integer status; |
||||
/** |
||||
* 表单的配置 |
||||
*/ |
||||
private String conf; |
||||
/** |
||||
* 表单项的数组 |
||||
* |
||||
* 目前直接将 https://github.com/JakHuang/form-generator 生成的 JSON 串,直接保存
|
||||
* 定义:https://github.com/JakHuang/form-generator/issues/46
|
||||
*/ |
||||
@TableField(typeHandler = JacksonTypeHandler.class) |
||||
private List<String> fields; |
||||
/** |
||||
* 备注 |
||||
*/ |
||||
private String remark; |
||||
|
||||
} |
@ -0,0 +1,90 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; |
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
||||
import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; |
||||
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 java.util.List; |
||||
|
||||
/** |
||||
* Bpm 流程定义的拓展表 |
||||
* 主要解决 Activiti {@link ProcessDefinition} 不支持拓展字段,所以新建拓展表 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@TableName(value = "bpm_process_definition_ext", autoResultMap = true) |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
@Builder |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
public class BpmProcessDefinitionExtDO extends BaseDO { |
||||
|
||||
/** |
||||
* 编号 |
||||
*/ |
||||
@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; |
||||
|
||||
|
||||
} |
@ -0,0 +1,83 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; |
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
||||
import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; |
||||
import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; |
||||
import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; |
||||
import com.baomidou.mybatisplus.annotation.TableField; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.*; |
||||
|
||||
import java.util.Set; |
||||
|
||||
/** |
||||
* Bpm 任务分配的规则表,用于自定义配置每个任务的负责人、候选人的分配规则。 |
||||
* 也就是说,废弃 BPMN 原本的 UserTask 设置的 assignee、candidateUsers 等配置,而是通过使用该规则进行计算对应的负责人。 |
||||
* |
||||
* 1. 默认情况下,{@link #processDefinitionId} 为 {@link #PROCESS_DEFINITION_ID_NULL} 值,表示贵改则与流程模型关联 |
||||
* 2. 在流程模型部署后,会将他的所有规则记录,复制出一份新部署出来的流程定义,通过设置 {@link #processDefinitionId} 为新的流程定义的编号进行关联 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@TableName(value = "bpm_task_assign_rule", autoResultMap = true) |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
@Builder |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
public class BpmTaskAssignRuleDO extends BaseDO { |
||||
|
||||
/** |
||||
* {@link #processDefinitionId} 空串,用于标识属于流程模型,而不属于流程定义 |
||||
*/ |
||||
public static final String PROCESS_DEFINITION_ID_NULL = ""; |
||||
|
||||
/** |
||||
* 编号 |
||||
*/ |
||||
@TableId |
||||
private Long id; |
||||
|
||||
/** |
||||
* 流程模型编号 |
||||
* |
||||
* 关联 Model 的 id 属性 |
||||
*/ |
||||
private String modelId; |
||||
/** |
||||
* 流程定义编号 |
||||
* |
||||
* 关联 ProcessDefinition 的 id 属性 |
||||
*/ |
||||
private String processDefinitionId; |
||||
/** |
||||
* 流程任务的定义 Key |
||||
* |
||||
* 关联 Task 的 taskDefinitionKey 属性 |
||||
*/ |
||||
private String taskDefinitionKey; |
||||
|
||||
/** |
||||
* 规则类型 |
||||
* |
||||
* 枚举 {@link BpmTaskAssignRuleTypeEnum} |
||||
*/ |
||||
@TableField("`type`") |
||||
private Integer type; |
||||
/** |
||||
* 规则值数组,一般关联指定表的编号 |
||||
* 根据 type 不同,对应的值是不同的: |
||||
* |
||||
* 1. {@link BpmTaskAssignRuleTypeEnum#ROLE} 时:角色编号 |
||||
* 2. {@link BpmTaskAssignRuleTypeEnum#DEPT_MEMBER} 时:部门编号 |
||||
* 3. {@link BpmTaskAssignRuleTypeEnum#DEPT_LEADER} 时:部门编号 |
||||
* 4. {@link BpmTaskAssignRuleTypeEnum#USER} 时:用户编号 |
||||
* 5. {@link BpmTaskAssignRuleTypeEnum#USER_GROUP} 时:用户组编号 |
||||
* 6. {@link BpmTaskAssignRuleTypeEnum#SCRIPT} 时:脚本编号,目前通过 {@link BpmTaskRuleScriptEnum#getId()} 标识 |
||||
*/ |
||||
@TableField(typeHandler = JsonLongSetTypeHandler.class) |
||||
private Set<Long> options; |
||||
|
||||
} |
@ -0,0 +1,5 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; |
||||
|
||||
// TODO 芋艿:先埋个坑。任务消息的配置规则。说白了,就是不同的
|
||||
public class BpmTaskMessageRuleDO { |
||||
} |
@ -0,0 +1,52 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.dataobject.definition; |
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
||||
import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; |
||||
import com.baomidou.mybatisplus.annotation.TableField; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.*; |
||||
|
||||
import java.util.Set; |
||||
|
||||
/** |
||||
* Bpm 用户组 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@TableName(value = "bpm_user_group", autoResultMap = true) |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
@Builder |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
public class BpmUserGroupDO extends BaseDO { |
||||
|
||||
/** |
||||
* 编号,自增 |
||||
*/ |
||||
@TableId |
||||
private Long id; |
||||
/** |
||||
* 组名 |
||||
*/ |
||||
private String name; |
||||
/** |
||||
* 描述 |
||||
*/ |
||||
private String description; |
||||
/** |
||||
* 状态 |
||||
* |
||||
* 枚举 {@link CommonStatusEnum} |
||||
*/ |
||||
private Integer status; |
||||
/** |
||||
* 成员用户编号数组 |
||||
*/ |
||||
@TableField(typeHandler = JsonLongSetTypeHandler.class) |
||||
private Set<Long> memberUserIds; |
||||
|
||||
} |
@ -0,0 +1,73 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; |
||||
import lombok.*; |
||||
import java.util.*; |
||||
import com.baomidou.mybatisplus.annotation.*; |
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
||||
|
||||
/** |
||||
* OA 请假申请 DO |
||||
* |
||||
* {@link #day} 请假天数,目前先简单做。一般是分成请假上午和下午,可以是 1 整天,可以是 0.5 半天 |
||||
* |
||||
* @author jason |
||||
* @author 芋道源码 |
||||
*/ |
||||
@TableName("bpm_oa_leave") |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
@Builder |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
public class BpmOALeaveDO extends BaseDO { |
||||
|
||||
/** |
||||
* 请假表单主键 |
||||
*/ |
||||
@TableId |
||||
private Long id; |
||||
/** |
||||
* 申请人的用户编号 |
||||
* |
||||
* 关联 AdminUserDO 的 id 属性 |
||||
*/ |
||||
private Long userId; |
||||
/** |
||||
* 请假类型 |
||||
*/ |
||||
@TableField("`type`") |
||||
private String type; |
||||
/** |
||||
* 原因 |
||||
*/ |
||||
private String reason; |
||||
/** |
||||
* 开始时间 |
||||
*/ |
||||
private Date startTime; |
||||
/** |
||||
* 结束时间 |
||||
*/ |
||||
private Date endTime; |
||||
/** |
||||
* 请假天数 |
||||
*/ |
||||
private Long day; |
||||
/** |
||||
* 请假的结果 |
||||
* |
||||
* 枚举 {@link BpmProcessInstanceResultEnum} |
||||
* 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈 |
||||
*/ |
||||
private Integer result; |
||||
|
||||
/** |
||||
* 对应的流程编号 |
||||
* |
||||
* 关联 ProcessInstance 的 id 属性 |
||||
*/ |
||||
private String processInstanceId; |
||||
|
||||
} |
@ -0,0 +1,90 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.dataobject.task; |
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; |
||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; |
||||
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; |
||||
|
||||
/** |
||||
* Bpm 流程实例的拓展表 |
||||
* 主要解决 Activiti ProcessInstance 和 HistoricProcessInstance 不支持拓展字段,所以新建拓展表 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@TableName(value = "bpm_process_instance_ext", autoResultMap = true) |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmProcessInstanceExtDO extends BaseDO { |
||||
|
||||
/** |
||||
* 编号,自增 |
||||
*/ |
||||
@TableId |
||||
private Long id; |
||||
/** |
||||
* 发起流程的用户编号 |
||||
* |
||||
* 冗余 HistoricProcessInstance 的 startUserId 属性 |
||||
*/ |
||||
private Long startUserId; |
||||
/** |
||||
* 流程实例的名字 |
||||
* |
||||
* 冗余 ProcessInstance 的 name 属性,用于筛选 |
||||
*/ |
||||
private String name; |
||||
/** |
||||
* 流程实例的编号 |
||||
* |
||||
* 关联 ProcessInstance 的 id 属性 |
||||
*/ |
||||
private String processInstanceId; |
||||
/** |
||||
* 流程定义的编号 |
||||
* |
||||
* 关联 ProcessDefinition 的 id 属性 |
||||
*/ |
||||
private String processDefinitionId; |
||||
/** |
||||
* 流程分类 |
||||
* |
||||
* 冗余 ProcessDefinition 的 category 属性 |
||||
* 数据字典 bpm_model_category |
||||
*/ |
||||
private String category; |
||||
/** |
||||
* 流程实例的状态 |
||||
* |
||||
* 枚举 {@link BpmProcessInstanceStatusEnum} |
||||
*/ |
||||
private Integer status; |
||||
/** |
||||
* 流程实例的结果 |
||||
* |
||||
* 枚举 {@link BpmProcessInstanceResultEnum} |
||||
*/ |
||||
private Integer result; |
||||
/** |
||||
* 结束时间 |
||||
* |
||||
* 冗余 HistoricProcessInstance 的 endTime 属性 |
||||
*/ |
||||
private Date endTime; |
||||
|
||||
/** |
||||
* 提交的表单值 |
||||
*/ |
||||
@TableField(typeHandler = JacksonTypeHandler.class) |
||||
private Map<String, Object> formVariables; |
||||
|
||||
} |
@ -0,0 +1,84 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.dataobject.task; |
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; |
||||
import com.baomidou.mybatisplus.annotation.TableId; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.ToString; |
||||
|
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* Bpm 流程任务的拓展表 |
||||
* 主要解决 Activiti Task 和 HistoricTaskInstance 不支持拓展字段,所以新建拓展表 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@TableName(value = "bpm_task_ext", autoResultMap = true) |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@ToString(callSuper = true) |
||||
public class BpmTaskExtDO extends BaseDO { |
||||
|
||||
/** |
||||
* 编号,自增 |
||||
*/ |
||||
@TableId |
||||
private Long id; |
||||
/** |
||||
* 任务的审批人 |
||||
* |
||||
* 冗余 Task 的 assignee 属性 |
||||
*/ |
||||
private Long assigneeUserId; |
||||
/** |
||||
* 任务的名字 |
||||
* |
||||
* 冗余 Task 的 name 属性,为了筛选 |
||||
*/ |
||||
private String name; |
||||
/** |
||||
* 任务的编号 |
||||
* |
||||
* 关联 Task 的 id 属性 |
||||
*/ |
||||
private String taskId; |
||||
// /**
|
||||
// * 任务的标识
|
||||
// *
|
||||
// * 关联 {@link Task#getTaskDefinitionKey()}
|
||||
// */
|
||||
// private String definitionKey;
|
||||
/** |
||||
* 任务的结果 |
||||
* |
||||
* 枚举 {@link BpmProcessInstanceResultEnum} |
||||
*/ |
||||
private Integer result; |
||||
/** |
||||
* 审批建议 |
||||
*/ |
||||
private String comment; |
||||
/** |
||||
* 任务的结束时间 |
||||
* |
||||
* 冗余 HistoricTaskInstance 的 endTime 属性 |
||||
*/ |
||||
private Date endTime; |
||||
|
||||
/** |
||||
* 流程实例的编号 |
||||
* |
||||
* 关联 ProcessInstance 的 id 属性 |
||||
*/ |
||||
private String processInstanceId; |
||||
/** |
||||
* 流程定义的编号 |
||||
* |
||||
* 关联 ProcessDefinition 的 id 属性 |
||||
*/ |
||||
private String processDefinitionId; |
||||
|
||||
} |
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.mysql.definition; |
||||
|
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
||||
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
/** |
||||
* 动态表单 Mapper |
||||
* |
||||
* @author 风里雾里 |
||||
*/ |
||||
@Mapper |
||||
public interface BpmFormMapper extends BaseMapperX<BpmFormDO> { |
||||
|
||||
default PageResult<BpmFormDO> selectPage(BpmFormPageReqVO reqVO) { |
||||
return selectPage(reqVO, new QueryWrapperX<BpmFormDO>() |
||||
.likeIfPresent("name", reqVO.getName()) |
||||
.orderByDesc("id")); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,22 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.mysql.definition; |
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; |
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
import java.util.Collection; |
||||
import java.util.List; |
||||
|
||||
@Mapper |
||||
public interface BpmProcessDefinitionExtMapper extends BaseMapperX<BpmProcessDefinitionExtDO> { |
||||
|
||||
default List<BpmProcessDefinitionExtDO> selectListByProcessDefinitionIds(Collection<String> processDefinitionIds) { |
||||
return selectList("process_definition_id", processDefinitionIds); |
||||
} |
||||
|
||||
default BpmProcessDefinitionExtDO selectByProcessDefinitionId(String processDefinitionId) { |
||||
return selectOne("process_definition_id", processDefinitionId); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,35 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.mysql.definition; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; |
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
||||
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.springframework.lang.Nullable; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Mapper |
||||
public interface BpmTaskAssignRuleMapper extends BaseMapperX<BpmTaskAssignRuleDO> { |
||||
|
||||
default List<BpmTaskAssignRuleDO> selectListByProcessDefinitionId(String processDefinitionId, |
||||
@Nullable String taskDefinitionKey) { |
||||
return selectList(new QueryWrapperX<BpmTaskAssignRuleDO>() |
||||
.eq("process_definition_id", processDefinitionId) |
||||
.eqIfPresent("task_definition_key", taskDefinitionKey)); |
||||
} |
||||
|
||||
default List<BpmTaskAssignRuleDO> selectListByModelId(String modelId) { |
||||
return selectList(new QueryWrapperX<BpmTaskAssignRuleDO>() |
||||
.eq("model_id", modelId) |
||||
.eq("process_definition_id", BpmTaskAssignRuleDO.PROCESS_DEFINITION_ID_NULL)); |
||||
} |
||||
|
||||
default BpmTaskAssignRuleDO selectListByModelIdAndTaskDefinitionKey(String modelId, |
||||
String taskDefinitionKey) { |
||||
return selectOne(new QueryWrapperX<BpmTaskAssignRuleDO>() |
||||
.eq("model_id", modelId) |
||||
.eq("process_definition_id", BpmTaskAssignRuleDO.PROCESS_DEFINITION_ID_NULL) |
||||
.eq("task_definition_key", taskDefinitionKey)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.mysql.definition; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 用户组 Mapper |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Mapper |
||||
public interface BpmUserGroupMapper extends BaseMapperX<BpmUserGroupDO> { |
||||
|
||||
default PageResult<BpmUserGroupDO> selectPage(BpmUserGroupPageReqVO reqVO) { |
||||
return selectPage(reqVO, new LambdaQueryWrapperX<BpmUserGroupDO>() |
||||
.likeIfPresent(BpmUserGroupDO::getName, reqVO.getName()) |
||||
.eqIfPresent(BpmUserGroupDO::getStatus, reqVO.getStatus()) |
||||
.betweenIfPresent(BpmUserGroupDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) |
||||
.orderByDesc(BpmUserGroupDO::getId)); |
||||
} |
||||
|
||||
default List<BpmUserGroupDO> selectListByStatus(Integer status) { |
||||
return selectList(BpmUserGroupDO::getStatus, status); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,29 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.mysql.oa; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
/** |
||||
* 请假申请 Mapper |
||||
* |
||||
* @author jason |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Mapper |
||||
public interface BpmOALeaveMapper extends BaseMapperX<BpmOALeaveDO> { |
||||
|
||||
default PageResult<BpmOALeaveDO> selectPage(Long userId, BpmOALeavePageReqVO reqVO) { |
||||
return selectPage(reqVO, new LambdaQueryWrapperX<BpmOALeaveDO>() |
||||
.eqIfPresent(BpmOALeaveDO::getUserId, userId) |
||||
.eqIfPresent(BpmOALeaveDO::getResult, reqVO.getResult()) |
||||
.eqIfPresent(BpmOALeaveDO::getType, reqVO.getType()) |
||||
.likeIfPresent(BpmOALeaveDO::getReason, reqVO.getReason()) |
||||
.betweenIfPresent(BpmOALeaveDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) |
||||
.orderByDesc(BpmOALeaveDO::getId)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,35 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.mysql.task; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceMyPageReqVO; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
||||
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
@Mapper |
||||
public interface BpmProcessInstanceExtMapper extends BaseMapperX<BpmProcessInstanceExtDO> { |
||||
|
||||
default PageResult<BpmProcessInstanceExtDO> selectPage(Long userId, BpmProcessInstanceMyPageReqVO reqVO) { |
||||
return selectPage(reqVO, new QueryWrapperX<BpmProcessInstanceExtDO>() |
||||
.eqIfPresent("start_user_id", userId) |
||||
.likeIfPresent("name", reqVO.getName()) |
||||
.eqIfPresent("process_definition_id", reqVO.getProcessDefinitionId()) |
||||
.eqIfPresent("category", reqVO.getCategory()) |
||||
.eqIfPresent("status", reqVO.getStatus()) |
||||
.eqIfPresent("result", reqVO.getResult()) |
||||
.betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) |
||||
.orderByDesc("id")); |
||||
} |
||||
|
||||
default BpmProcessInstanceExtDO selectByProcessInstanceId(String processDefinitionId) { |
||||
return selectOne("process_instance_id", processDefinitionId); |
||||
} |
||||
|
||||
default void updateByProcessInstanceId(BpmProcessInstanceExtDO updateObj) { |
||||
update(updateObj, new QueryWrapper<BpmProcessInstanceExtDO>() |
||||
.eq("process_instance_id", updateObj.getProcessInstanceId())); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.mysql.task; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; |
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
||||
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<BpmTaskExtDO> { |
||||
|
||||
default void updateByTaskId(BpmTaskExtDO entity) { |
||||
update(entity, new LambdaQueryWrapper<BpmTaskExtDO>().eq(BpmTaskExtDO::getTaskId, entity.getTaskId())); |
||||
} |
||||
|
||||
default List<BpmTaskExtDO> selectListByTaskIds(Collection<String> taskIds) { |
||||
return selectList(BpmTaskExtDO::getTaskId, taskIds); |
||||
} |
||||
|
||||
default List<BpmTaskExtDO> selectListByProcessInstanceId(String processInstanceId) { |
||||
return selectList("process_instance_id", processInstanceId); |
||||
} |
||||
} |
@ -0,0 +1,21 @@
|
||||
package cn.iocoder.yudao.module.bpm.enums.definition; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
/** |
||||
* BPM 模型的表单类型的枚举 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Getter |
||||
@AllArgsConstructor |
||||
public enum BpmModelFormTypeEnum { |
||||
|
||||
NORMAL(10, "流程表单"), // 对应 BpmFormDO
|
||||
CUSTOM(20, "业务表单") // 业务自己定义的表单,自己进行数据的存储
|
||||
; |
||||
|
||||
private final Integer type; |
||||
private final String desc; |
||||
} |
@ -0,0 +1,37 @@
|
||||
package cn.iocoder.yudao.module.bpm.enums.definition; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
/** |
||||
* BPM 任务分配规则的类型枚举 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Getter |
||||
@AllArgsConstructor |
||||
public enum BpmTaskAssignRuleTypeEnum { |
||||
|
||||
ROLE(10, "角色"), |
||||
|
||||
DEPT_MEMBER(20, "部门的成员"), // 包括负责人
|
||||
DEPT_LEADER(21, "部门的负责人"), |
||||
POST(22, "岗位"), |
||||
|
||||
USER(30, "用户"), |
||||
|
||||
USER_GROUP(40, "用户组"), |
||||
|
||||
SCRIPT(50, "自定义脚本"), // 例如说,发起人所在部门的领导、发起人所在部门的领导的领导
|
||||
; |
||||
|
||||
/** |
||||
* 类型 |
||||
*/ |
||||
private final Integer type; |
||||
/** |
||||
* 描述 |
||||
*/ |
||||
private final String desc; |
||||
|
||||
} |
@ -0,0 +1,30 @@
|
||||
package cn.iocoder.yudao.module.bpm.enums.definition; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
/** |
||||
* BPM 任务规则的脚本枚举 |
||||
* 目前暂时通过 TODO 芋艿:硬编码,未来可以考虑 Groovy 动态脚本的方式 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Getter |
||||
@AllArgsConstructor |
||||
public enum BpmTaskRuleScriptEnum { |
||||
|
||||
START_USER(10L, "流程发起人"), |
||||
|
||||
LEADER_X1(20L, "流程发起人的一级领导"), |
||||
LEADER_X2(21L, "流程发起人的二级领导"); |
||||
|
||||
/** |
||||
* 脚本编号 |
||||
*/ |
||||
private final Long id; |
||||
/** |
||||
* 脚本描述 |
||||
*/ |
||||
private final String desc; |
||||
|
||||
} |
@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.bpm.enums.message; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
/** |
||||
* Bpm 消息的枚举 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@AllArgsConstructor |
||||
@Getter |
||||
public enum BpmMessageEnum { |
||||
|
||||
PROCESS_INSTANCE_APPROVE("bpm_process_instance_approve"), // 流程任务被审批通过时,发送给申请人
|
||||
PROCESS_INSTANCE_REJECT("bpm_process_instance_reject"), // 流程任务被审批不通过时,发送给申请人
|
||||
TASK_ASSIGNED("bpm_task_assigned"); // 任务被分配时,发送给审批人
|
||||
|
||||
/** |
||||
* 短信模板的标识 |
||||
* |
||||
* 关联 SmsTemplateDO 的 code 属性 |
||||
*/ |
||||
private final String smsTemplateCode; |
||||
|
||||
} |
@ -0,0 +1,37 @@
|
||||
package cn.iocoder.yudao.module.bpm.enums.task; |
||||
|
||||
import cn.hutool.core.util.StrUtil; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
/** |
||||
* 流程实例的删除原因 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Getter |
||||
@AllArgsConstructor |
||||
public enum BpmProcessInstanceDeleteReasonEnum { |
||||
|
||||
REJECT_TASK("不通过任务,原因:{}"), // 修改文案时,需要注意 isRejectReason 方法
|
||||
CANCEL_TASK("主动取消任务,原因:{}"); |
||||
|
||||
private final String reason; |
||||
|
||||
/** |
||||
* 格式化理由 |
||||
* |
||||
* @param args 参数 |
||||
* @return 理由 |
||||
*/ |
||||
public String format(Object... args) { |
||||
return StrUtil.format(reason, args); |
||||
} |
||||
|
||||
// ========== 逻辑 ==========
|
||||
|
||||
public static boolean isRejectReason(String reason) { |
||||
return StrUtil.startWith(reason, "不通过任务,原因:"); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,29 @@
|
||||
package cn.iocoder.yudao.module.bpm.enums.task; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
/** |
||||
* 流程实例的结果 |
||||
* |
||||
* @author jason |
||||
*/ |
||||
@Getter |
||||
@AllArgsConstructor |
||||
public enum BpmProcessInstanceResultEnum { |
||||
|
||||
PROCESS(1, "处理中"), |
||||
APPROVE(2, "通过"), |
||||
REJECT(3, "不通过"), |
||||
CANCEL(4, "已取消"); |
||||
|
||||
/** |
||||
* 结果 |
||||
*/ |
||||
private final Integer result; |
||||
/** |
||||
* 描述 |
||||
*/ |
||||
private final String desc; |
||||
|
||||
} |
@ -0,0 +1,27 @@
|
||||
package cn.iocoder.yudao.module.bpm.enums.task; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
/** |
||||
* 流程实例的状态 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@Getter |
||||
@AllArgsConstructor |
||||
public enum BpmProcessInstanceStatusEnum { |
||||
|
||||
RUNNING(1, "进行中"), |
||||
FINISH(2, "已完成"); |
||||
|
||||
/** |
||||
* 状态 |
||||
*/ |
||||
private final Integer status; |
||||
/** |
||||
* 描述 |
||||
*/ |
||||
private final String desc; |
||||
|
||||
} |
@ -0,0 +1,19 @@
|
||||
package cn.iocoder.yudao.module.bpm.framework.bpm.config; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventPublisher; |
||||
import org.springframework.context.ApplicationEventPublisher; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
/** |
||||
* BPM 通用的 Configuration 配置类,提供给 Activiti 和 Flowable |
||||
*/ |
||||
@Configuration |
||||
public class BpmCommonConfiguration { |
||||
|
||||
@Bean |
||||
public BpmProcessInstanceResultEventPublisher processInstanceResultEventPublisher(ApplicationEventPublisher publisher) { |
||||
return new BpmProcessInstanceResultEventPublisher(publisher); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,44 @@
|
||||
package cn.iocoder.yudao.module.bpm.framework.bpm.core.event; |
||||
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; |
||||
import lombok.Data; |
||||
import org.springframework.context.ApplicationEvent; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
|
||||
/** |
||||
* 流程实例的结果发生变化的 Event |
||||
* 定位:由于额外增加了 {@link BpmProcessInstanceExtDO#getResult()} 结果,所以增加该事件 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@SuppressWarnings("ALL") |
||||
@Data |
||||
public class BpmProcessInstanceResultEvent extends ApplicationEvent { |
||||
|
||||
/** |
||||
* 流程实例的编号 |
||||
*/ |
||||
@NotNull(message = "流程实例的编号不能为空") |
||||
private String id; |
||||
/** |
||||
* 流程实例的 key |
||||
*/ |
||||
@NotNull(message = "流程实例的 key 不能为空") |
||||
private String processDefinitionKey; |
||||
/** |
||||
* 流程实例的结果 |
||||
*/ |
||||
@NotNull(message = "流程实例的结果不能为空") |
||||
private Integer result; |
||||
/** |
||||
* 流程实例对应的业务标识 |
||||
* 例如说,请假 |
||||
*/ |
||||
private String businessKey; |
||||
|
||||
public BpmProcessInstanceResultEvent(Object source) { |
||||
super(source); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,34 @@
|
||||
package cn.iocoder.yudao.module.bpm.framework.bpm.core.event; |
||||
|
||||
import cn.hutool.core.util.StrUtil; |
||||
import org.springframework.context.ApplicationListener; |
||||
|
||||
/** |
||||
* {@link BpmProcessInstanceResultEvent} 的监听器 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
public abstract class BpmProcessInstanceResultEventListener |
||||
implements ApplicationListener<BpmProcessInstanceResultEvent> { |
||||
|
||||
@Override |
||||
public final void onApplicationEvent(BpmProcessInstanceResultEvent event) { |
||||
if (!StrUtil.equals(event.getProcessDefinitionKey(), getProcessDefinitionKey())) { |
||||
return; |
||||
} |
||||
onEvent(event); |
||||
} |
||||
|
||||
/** |
||||
* @return 返回监听的流程定义 Key |
||||
*/ |
||||
protected abstract String getProcessDefinitionKey(); |
||||
|
||||
/** |
||||
* 处理事件 |
||||
* |
||||
* @param event 事件 |
||||
*/ |
||||
protected abstract void onEvent(BpmProcessInstanceResultEvent event); |
||||
|
||||
} |
@ -0,0 +1,24 @@
|
||||
package cn.iocoder.yudao.module.bpm.framework.bpm.core.event; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import org.springframework.context.ApplicationEventPublisher; |
||||
import org.springframework.validation.annotation.Validated; |
||||
|
||||
import javax.validation.Valid; |
||||
|
||||
/** |
||||
* {@link BpmProcessInstanceResultEvent} 的生产者 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
@AllArgsConstructor |
||||
@Validated |
||||
public class BpmProcessInstanceResultEventPublisher { |
||||
|
||||
private final ApplicationEventPublisher publisher; |
||||
|
||||
public void sendProcessInstanceResultEvent(@Valid BpmProcessInstanceResultEvent event) { |
||||
publisher.publishEvent(event); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,6 @@
|
||||
/** |
||||
* 自定义 Event 实现,提供方便业务接入的 Listener! |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
package cn.iocoder.yudao.module.bpm.framework.bpm.core.event; |
@ -0,0 +1,4 @@
|
||||
/** |
||||
* 占位 |
||||
*/ |
||||
package cn.iocoder.yudao.module.bpm.framework.bpm.core; |
@ -0,0 +1,6 @@
|
||||
/** |
||||
* 提供给 Activiti 和 Flowable 的通用封装 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
package cn.iocoder.yudao.module.bpm.framework.bpm; |
@ -0,0 +1,6 @@
|
||||
/** |
||||
* 属于 bpm 模块的 framework 封装 |
||||
* |
||||
* @author 芋道源码 |
||||
*/ |
||||
package cn.iocoder.yudao.module.bpm.framework; |
@ -0,0 +1,10 @@
|
||||
/** |
||||
* bpm 包下,业务流程管理(Business Process Management),我们放工作流的功能。 |
||||
* 例如说:流程定义、表单配置、审核中心(我的申请、我的待办、我的已办)等等 |
||||
* |
||||
* bpm 解释:https://baike.baidu.com/item/BPM/1933
|
||||
* |
||||
* 1. Controller URL:以 /bpm/ 开头,避免和其它 Module 冲突 |
||||
* 2. DataObject 表名:以 bpm_ 开头,方便在数据库中区分 |
||||
*/ |
||||
package cn.iocoder.yudao.module.bpm; |
@ -0,0 +1,99 @@
|
||||
package cn.iocoder.yudao.module.bpm.service.definition; |
||||
|
||||
import cn.hutool.core.collection.CollUtil; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormCreateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; |
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form.BpmFormUpdateReqVO; |
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; |
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
||||
|
||||
import javax.validation.Valid; |
||||
import java.util.Collection; |
||||
import java.util.Collections; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
|
||||
/** |
||||
* 动态表单 Service 接口 |
||||
* |
||||
* @author @风里雾里 |
||||
*/ |
||||
public interface BpmFormService { |
||||
|
||||
/** |
||||
* 创建动态表单 |
||||
* |
||||
* @param createReqVO 创建信息 |
||||
* @return 编号 |
||||
*/ |
||||
Long createForm(@Valid BpmFormCreateReqVO createReqVO); |
||||
|
||||
/** |
||||
* 更新动态表单 |
||||
* |
||||
* @param updateReqVO 更新信息 |
||||
*/ |
||||
void updateForm(@Valid BpmFormUpdateReqVO updateReqVO); |
||||
|
||||
/** |
||||
* 删除动态表单 |
||||
* |
||||
* @param id 编号 |
||||
*/ |
||||
void deleteForm(Long id); |
||||
|
||||
/** |
||||
* 获得动态表单 |
||||
* |
||||
* @param id 编号 |
||||
* @return 动态表单 |
||||
*/ |
||||
BpmFormDO getForm(Long id); |
||||
|
||||
/** |
||||
* 获得动态表单列表 |
||||
* |
||||
* @return 动态表单列表 |
||||
*/ |
||||
List<BpmFormDO> getFormList(); |
||||
|
||||
/** |
||||
* 获得动态表单列表 |
||||
* |
||||
* @param ids 编号 |
||||
* @return 动态表单列表 |
||||
*/ |
||||
List<BpmFormDO> getFormList(Collection<Long> ids); |
||||
|
||||
/** |
||||
* 获得动态表单 Map |
||||
* |
||||
* @param ids 编号 |
||||
* @return 动态表单 Map |
||||
*/ |
||||
default Map<Long, BpmFormDO> getFormMap(Collection<Long> ids) { |
||||
if (CollUtil.isEmpty(ids)) { |
||||
return Collections.emptyMap(); |
||||
} |
||||
return CollectionUtils.convertMap(this.getFormList(ids), BpmFormDO::getId); |
||||
} |
||||
|
||||
/** |
||||
* 获得动态表单分页 |
||||
* |
||||
* @param pageReqVO 分页查询 |
||||
* @return 动态表单分页 |
||||
*/ |
||||
PageResult<BpmFormDO> getFormPage(BpmFormPageReqVO pageReqVO); |
||||
|
||||
/** |
||||
* 校验流程表单已配置 |
||||
* |
||||
* @param configStr configStr 字段 |
||||
* @return 流程表单 |
||||
*/ |
||||
BpmFormDO checkFormConfig(String configStr); |
||||
|
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue