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