Browse Source

1、出差审批接口

dongpo 1 year ago
parent
commit
45d659bd9c
18 changed files with 773 additions and 221 deletions
  1. 113 53
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/business/OaBusinessController.java
  2. 22 4
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/business/vo/OaBusinessRespVO.java
  3. 8 6
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/business/vo/OaBusinessSaveReqVO.java
  4. 0 8
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/entry/vo/OaEntryRespVO.java
  5. 0 16
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/leave/vo/OaLeaveRespVO.java
  6. 0 20
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/renew/vo/OaRenewRespVO.java
  7. 0 8
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/turnover/vo/OaTurnoverRespVO.java
  8. 0 15
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalPageReqVO.java
  9. 0 16
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalRespVO.java
  10. 0 4
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/universal/OaUniversalMapper.java
  11. 25 39
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/business/OaBusinessService.java
  12. 599 26
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/business/OaBusinessServiceImpl.java
  13. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/conversion/OaConversionServiceImpl.java
  14. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/entry/OaEntryServiceImpl.java
  15. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/leave/OaLeaveServiceImpl.java
  16. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/renew/OaRenewServiceImpl.java
  17. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/turnover/OaTurnoverServiceImpl.java
  18. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/universal/OaUniversalServiceImpl.java

+ 113 - 53
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/business/OaBusinessController.java

@@ -1,35 +1,33 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.business;
 
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo.OaBusinessPageReqVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo.OaBusinessRespVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo.OaBusinessSaveReqVO;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
+import cn.iocoder.yudao.module.bpm.service.oa.business.OaBusinessService;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springdoc.api.annotations.ParameterObject;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
 import java.io.IOException;
+import java.util.List;
 
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 
-import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-
-import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
-import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
-
-import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.business.OaBusinessDO;
-import cn.iocoder.yudao.module.bpm.service.oa.business.OaBusinessService;
-
 @Tag(name = "管理后台 - 出差流程信息")
 @RestController
 @RequestMapping("/bpm/oa-business")
@@ -39,58 +37,120 @@ public class OaBusinessController {
     @Resource
     private OaBusinessService oaBusinessService;
 
-    @PostMapping("/create")
-    @Operation(summary = "创建出差流程信息")
-    @PreAuthorize("@ss.hasPermission('bpm:oa-business:create')")
-    public CommonResult<Long> createOaBusiness(@Valid @RequestBody OaBusinessSaveReqVO createReqVO) {
-        return success(oaBusinessService.createOaBusiness(createReqVO));
+    @PostMapping("/staging")
+    @Operation(summary = "暂存出差审批流程信息")
+    @ApiOperationSupport(order = 1)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:staging')")
+    public CommonResult<Long> stagingOaBusiness(@RequestBody OaBusinessSaveReqVO stagingReqVO) {
+        Long oaBusinessId = oaBusinessService.stagingOaBusiness(stagingReqVO);
+        return success(oaBusinessId, "暂存成功");
+    }
+
+    @PostMapping("/commit")
+    @Operation(summary = "提交出差审批流程信息")
+    @ApiOperationSupport(order = 2)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:commit')")
+    public CommonResult<Long> commitOaBusiness(@Valid @RequestBody OaBusinessSaveReqVO commitReqVO) {
+        Long oaBusinessId = oaBusinessService.commitOaBusiness(commitReqVO);
+        return success(oaBusinessId, "提交成功");
+    }
+
+    @PostMapping("/agree")
+    @Operation(summary = "审批同意出差审批流程信息")
+    @ApiOperationSupport(order = 3)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:agree')")
+    public CommonResult<Long> agreeOaBusiness(@Valid @RequestBody BpmTaskApproveReqVO agreeReqVO) {
+        Long result = oaBusinessService.agreeOaBusiness(agreeReqVO);
+        return success(result, "审批成功");
     }
 
-    @PutMapping("/update")
-    @Operation(summary = "更新出差流程信息")
-    @PreAuthorize("@ss.hasPermission('bpm:oa-business:update')")
-    public CommonResult<Boolean> updateOaBusiness(@Valid @RequestBody OaBusinessSaveReqVO updateReqVO) {
-        oaBusinessService.updateOaBusiness(updateReqVO);
-        return success(true);
+    @PostMapping("/disagree")
+    @Operation(summary = "驳回出差审批流程信息")
+    @ApiOperationSupport(order = 4)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:disagree')")
+    public CommonResult<Long> disagreeOaBusiness(@Valid @RequestBody BpmTaskReturnReqVO disagreeReqVO) {
+        Long result = oaBusinessService.disagreeOaBusiness(disagreeReqVO);
+        return success(result, "驳回成功");
+    }
+
+    @PostMapping("/revocation")
+    @Operation(summary = "撤回出差审批流程信息")
+    @ApiOperationSupport(order = 5)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:revocation')")
+    public CommonResult<Long> revocationOaBusiness(@Valid @RequestBody BpmTaskApproveReqVO revocationReqVO) {
+        Long result = oaBusinessService.revocationOaBusiness(revocationReqVO);
+        return success(result, "撤回成功");
+    }
+
+    @PostMapping("/reCommit")
+    @Operation(summary = "驳回或撤回后再次提交出差审批流程信息")
+    @ApiOperationSupport(order = 6)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:re-commit')")
+    public CommonResult<Long> reCommitOaBusiness(@Valid @RequestBody OaBusinessSaveReqVO reCommitReqVO) {
+        Long result = oaBusinessService.reCommitOaBusiness(reCommitReqVO);
+        return success(result, "再次提交成功");
+    }
+
+    @DeleteMapping("/close")
+    @Operation(summary = "驳回或撤回后关闭出差审批流程信息")
+    @ApiOperationSupport(order = 7)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-entry:close')")
+    public CommonResult<Long> closeOaBusiness(@RequestParam("id") Long id) {
+        Long result = oaBusinessService.closeOaBusiness(id);
+
+        return success(result, "关闭成功");
     }
 
     @DeleteMapping("/delete")
-    @Operation(summary = "删除出差流程信息")
+    @Operation(summary = "删除出差审批流程信息")
+    @ApiOperationSupport(order = 8)
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('bpm:oa-business:delete')")
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:delete')")
     public CommonResult<Boolean> deleteOaBusiness(@RequestParam("id") Long id) {
         oaBusinessService.deleteOaBusiness(id);
-        return success(true);
+        return success(true, "删除成功");
     }
 
     @GetMapping("/get")
-    @Operation(summary = "获得出差流程信息")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('bpm:oa-business:query')")
+    @Operation(summary = "根据id获得出差审批流程信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @ApiOperationSupport(order = 9)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:query-id')")
     public CommonResult<OaBusinessRespVO> getOaBusiness(@RequestParam("id") Long id) {
-        OaBusinessDO oaBusiness = oaBusinessService.getOaBusiness(id);
-        return success(BeanUtils.toBean(oaBusiness, OaBusinessRespVO.class));
+        OaBusinessRespVO respVO = oaBusinessService.getOaBusiness(id);
+        return success(respVO, "查询对象成功");
+    }
+
+    @GetMapping("/getByProcInstId")
+    @Operation(summary = "根据流程实例id获得出差审批流程信息")
+    @Parameter(name = "procInstId", description = "流程实例id", required = true, example = "9528a78d-457e-11ef-853c-4c034fce6445")
+    @ApiOperationSupport(order = 10)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:query-proc-inst-id')")
+    public CommonResult<OaBusinessRespVO> getOaBusinessByProcInstId(@RequestParam("procInstId") String procInstId) {
+        OaBusinessRespVO respVO = oaBusinessService.getOaBusinessByProcInstId(procInstId);
+        return success(respVO, "查询对象成功");
     }
 
     @GetMapping("/page")
-    @Operation(summary = "获得出差流程信息分页")
-    @PreAuthorize("@ss.hasPermission('bpm:oa-business:query')")
-    public CommonResult<PageResult<OaBusinessRespVO>> getOaBusinessPage(@Valid OaBusinessPageReqVO pageReqVO) {
-        PageResult<OaBusinessDO> pageResult = oaBusinessService.getOaBusinessPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, OaBusinessRespVO.class));
+    @Operation(summary = "获得出差审批流程信息分页")
+    @ApiOperationSupport(order = 11)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:query-page')")
+    public CommonResult<PageResult<OaBusinessRespVO>> getOaBusinessPage(@Valid @ParameterObject OaBusinessPageReqVO pageReqVO) {
+        return success(oaBusinessService.getOaBusinessPage(pageReqVO), "查询列表成功");
     }
 
     @GetMapping("/export-excel")
-    @Operation(summary = "导出出差流程信息 Excel")
-    @PreAuthorize("@ss.hasPermission('bpm:oa-business:export')")
+    @Operation(summary = "导出出差审批流程信息 Excel")
+    @ApiOperationSupport(order = 12)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-business:export')")
     @ApiAccessLog(operateType = EXPORT)
-    public void exportOaBusinessExcel(@Valid OaBusinessPageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
-        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<OaBusinessDO> list = oaBusinessService.getOaBusinessPage(pageReqVO).getList();
+    public void exportOaBusinessExcel(@ParameterObject OaBusinessPageReqVO pageReqVO,
+                                      HttpServletResponse response) throws IOException {
+        PageResult<OaBusinessRespVO> pageResult = oaBusinessService.exportOaBusinessExcel(pageReqVO);
+        List<OaBusinessRespVO> list = pageResult.getList();
         // 导出 Excel
-        ExcelUtils.write(response, "出差流程信息.xls", "数据", OaBusinessRespVO.class,
-                        BeanUtils.toBean(list, OaBusinessRespVO.class));
+        ExcelUtils.write(response, "出差审批流程信息.xls", "数据", OaBusinessRespVO.class,
+                BeanUtils.toBean(list, OaBusinessRespVO.class));
     }
 
 }

+ 22 - 4
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/business/vo/OaBusinessRespVO.java

@@ -1,5 +1,8 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo;
 
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import java.util.*;
@@ -38,6 +41,10 @@ public class OaBusinessRespVO {
     @ExcelProperty("部门id")
     private Long deptId;
 
+    @Schema(description = "部门名称")
+    @ExcelProperty("部门名称")
+    private String deptName;
+
     @Schema(description = "职位")
     @ExcelProperty("职位")
     private String position;
@@ -66,6 +73,10 @@ public class OaBusinessRespVO {
     @ExcelProperty("审核状态(0暂存、1已提交、2审核中、3已审核、4已关闭、5已驳回、6已撤回)")
     private String auditStatus;
 
+    @Schema(description = "当前审核人员工id", example = "31626")
+    @ExcelProperty("当前审核人员工id")
+    private Long currentAuditEmployeeId;
+
     @Schema(description = "当前审核人员工姓名", example = "芋艿")
     @ExcelProperty("当前审核人员工姓名")
     private String currentAuditEmployeeName;
@@ -74,10 +85,6 @@ public class OaBusinessRespVO {
     @ExcelProperty("最后审核时间")
     private LocalDateTime finalAuditDate;
 
-    @Schema(description = "发起人选择的审批人", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("发起人选择的审批人")
-    private String startUserSelectAssignees;
-
     @Schema(description = "申请人员工姓名", example = "芋艿")
     @ExcelProperty("申请人员工姓名")
     private String applyEmployeeName;
@@ -86,4 +93,15 @@ public class OaBusinessRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "附件列表")
+    private List<FileDTO> fileList;
+
+    @Schema(description = "审批记录列表")
+    private List<BpmTaskRespVO> auditRecordList;
+
+    @Schema(description = "审批人员列表")
+    private List<AdminUserRespDTO> auditUserList;
+
+    @Schema(description = "当前用户待处理的任务id")
+    private String taskId;
 }

+ 8 - 6
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/business/vo/OaBusinessSaveReqVO.java

@@ -18,19 +18,19 @@ public class OaBusinessSaveReqVO {
     private Long employeeId;
 
     @Schema(description = "出差事由", requiredMode = Schema.RequiredMode.REQUIRED, example = "不香")
-    @NotEmpty(message = "出差事由不能为空")
+    @NotBlank(message = "出差事由不能为空")
     private String reason;
 
     @Schema(description = "出差目的地", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotEmpty(message = "出差目的地不能为空")
+    @NotBlank(message = "出差目的地不能为空")
     private String destination;
 
     @Schema(description = "出差开始日期", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotEmpty(message = "出差开始日期不能为空")
+    @NotBlank(message = "出差开始日期不能为空")
     private String startDate;
 
     @Schema(description = "出差结束日期", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotEmpty(message = "出差结束日期不能为空")
+    @NotBlank(message = "出差结束日期不能为空")
     private String endDate;
 
     @Schema(description = "出差天数(d)")
@@ -41,11 +41,13 @@ public class OaBusinessSaveReqVO {
     private BigDecimal estimatedCost;
 
     @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotEmpty(message = "备注不能为空")
     private String remarks;
 
     @Schema(description = "发起人选择的审批人", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotEmpty(message = "发起人选择的审批人不能为空")
-    private String startUserSelectAssignees;
+    private List<Long> startUserSelectAssignees;
+
+    @Schema(description = "附件主键id", example = "[1, 2]")
+    private List<Long> fileIdList;
 
 }

+ 0 - 8
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/entry/vo/OaEntryRespVO.java

@@ -94,18 +94,10 @@ public class OaEntryRespVO {
     @ExcelProperty("当前审核人用户id")
     private Long currentAuditUserId;
 
-    @Schema(description = "当前审核人用户uuid")
-    @ExcelProperty("当前审核人用户uuid")
-    private String currentAuditUserUuid;
-
     @Schema(description = "当前审核人员工id")
     @ExcelProperty("当前审核人员工id")
     private Long currentAuditEmployeeId;
 
-    @Schema(description = "当前审核人员工uuid")
-    @ExcelProperty("当前审核人员工uuid")
-    private String currentAuditEmployeeUuid;
-
     @Schema(description = "当前审核人员工uuid")
     @ExcelProperty("当前审核人员工uuid")
     private String currentAuditEmployeeName;

+ 0 - 16
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/leave/vo/OaLeaveRespVO.java

@@ -28,10 +28,6 @@ public class OaLeaveRespVO {
     @ExcelProperty("转正人id")
     private Long employeeId;
 
-    @Schema(description = "转正人uuid", example = "31445")
-    @ExcelProperty("转正人uuid")
-    private String employeeUuid;
-
     @Schema(description = "转正员工姓名", example = "王五")
     @ExcelProperty("转正员工姓名")
     private String employeeName;
@@ -43,10 +39,6 @@ public class OaLeaveRespVO {
     @ExcelProperty("用户账号id")
     private Long userId;
 
-    @Schema(description = "用户账号uuid", example = "13640")
-    @ExcelProperty("用户账号uuid")
-    private String userUuid;
-
     @Schema(description = "部门id", example = "26110")
     @ExcelProperty("部门id")
     private Long deptId;
@@ -107,18 +99,10 @@ public class OaLeaveRespVO {
     @ExcelProperty("当前审核人用户id")
     private Long currentAuditUserId;
 
-    @Schema(description = "当前审核人用户uuid", example = "30632")
-    @ExcelProperty("当前审核人用户uuid")
-    private String currentAuditUserUuid;
-
     @Schema(description = "当前审核人员工id", example = "7920")
     @ExcelProperty("当前审核人员工id")
     private Long currentAuditEmployeeId;
 
-    @Schema(description = "当前审核人员工uuid", example = "18105")
-    @ExcelProperty("当前审核人员工uuid")
-    private String currentAuditEmployeeUuid;
-
     @Schema(description = "当前审核人员工姓名")
     @ExcelProperty("当前审核人员工姓名")
     private String currentAuditEmployeeName;

+ 0 - 20
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/renew/vo/OaRenewRespVO.java

@@ -28,10 +28,6 @@ public class OaRenewRespVO {
     @ExcelProperty("续签人id")
     private Long employeeId;
 
-    @Schema(description = "续签人uuid", example = "24001")
-    @ExcelProperty("续签人uuid")
-    private String employeeUuid;
-
     @Schema(description = "续签员工姓名", example = "赵六")
     @ExcelProperty("续签员工姓名")
     private String employeeName;
@@ -44,18 +40,10 @@ public class OaRenewRespVO {
     @ExcelProperty("用户账号id")
     private Long userId;
 
-    @Schema(description = "用户账号uuid", example = "12052")
-    @ExcelProperty("用户账号uuid")
-    private String userUuid;
-
     @Schema(description = "部门id", example = "28162")
     @ExcelProperty("部门id")
     private Long deptId;
 
-    @Schema(description = "部门uuid", example = "17499")
-    @ExcelProperty("部门uuid")
-    private String deptUuid;
-
     @Schema(description = "部门名称")
     @ExcelProperty("部门名称")
     private String deptName;
@@ -108,18 +96,10 @@ public class OaRenewRespVO {
     @ExcelProperty("当前审核人用户id")
     private Long currentAuditUserId;
 
-    @Schema(description = "当前审核人用户uuid", example = "31429")
-    @ExcelProperty("当前审核人用户uuid")
-    private String currentAuditUserUuid;
-
     @Schema(description = "当前审核人员工id", example = "22621")
     @ExcelProperty("当前审核人员工id")
     private Long currentAuditEmployeeId;
 
-    @Schema(description = "当前审核人员工uuid", example = "12859")
-    @ExcelProperty("当前审核人员工uuid")
-    private String currentAuditEmployeeUuid;
-
     @Schema(description = "当前审核人员工姓名")
     @ExcelProperty("当前审核人员工姓名")
     private String currentAuditEmployeeName;

+ 0 - 8
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/turnover/vo/OaTurnoverRespVO.java

@@ -91,18 +91,10 @@ public class OaTurnoverRespVO {
     @ExcelProperty("当前审核人用户id")
     private Long currentAuditUserId;
 
-    @Schema(description = "当前审核人用户uuid", example = "27993")
-    @ExcelProperty("当前审核人用户uuid")
-    private String currentAuditUserUuid;
-
     @Schema(description = "当前审核人员工id", example = "31626")
     @ExcelProperty("当前审核人员工id")
     private Long currentAuditEmployeeId;
 
-    @Schema(description = "当前审核人员工uuid", example = "6500")
-    @ExcelProperty("当前审核人员工uuid")
-    private String currentAuditEmployeeUuid;
-
     @Schema(description = "当前审核人员工姓名")
     @ExcelProperty("当前审核人员工姓名")
     private String currentAuditEmployeeName;

+ 0 - 15
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalPageReqVO.java

@@ -23,9 +23,6 @@ public class OaUniversalPageReqVO extends PageParam {
     @Schema(description = "申请人id", example = "14065")
     private Long employeeId;
 
-    @Schema(description = "申请人uuid", example = "8771")
-    private String employeeUuid;
-
     @Schema(description = "申请员工姓名", example = "芋艿")
     private String employeeName;
 
@@ -35,9 +32,6 @@ public class OaUniversalPageReqVO extends PageParam {
     @Schema(description = "申请用户账号id", example = "18283")
     private Long userId;
 
-    @Schema(description = "申请用户账号uuid", example = "28769")
-    private String userUuid;
-
     @Schema(description = "申请用户账号手机号", example = "13900000000")
     private String userPhone;
 
@@ -68,18 +62,9 @@ public class OaUniversalPageReqVO extends PageParam {
     @Schema(description = "当前审核人用户id", example = "31811")
     private Long currentAuditUserId;
 
-    @Schema(description = "当前审核人用户uuid", example = "23687")
-    private String currentAuditUserUuid;
-
-    @Schema(description = "当前审核人用户姓名")
-    private String currentAuditUserName;
-
     @Schema(description = "当前审核人员工id", example = "2375")
     private Long currentAuditEmployeeId;
 
-    @Schema(description = "当前审核人员工uuid", example = "13039")
-    private String currentAuditEmployeeUuid;
-
     @Schema(description = "当前审核人员工姓名")
     private String currentAuditEmployeeName;
 

+ 0 - 16
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalRespVO.java

@@ -45,10 +45,6 @@ public class OaUniversalRespVO {
     @ExcelProperty("申请用户账号id")
     private Long userId;
 
-    @Schema(description = "申请用户账号uuid")
-    @ExcelProperty("申请用户账号uuid")
-    private String userUuid;
-
     @Schema(description = "申请用户账号手机号")
     private String userPhone;
 
@@ -56,10 +52,6 @@ public class OaUniversalRespVO {
     @ExcelProperty("部门id")
     private Long deptId;
 
-    @Schema(description = "部门uuid")
-    @ExcelProperty("部门uuid")
-    private String deptUuid;
-
     @Schema(description = "部门名称")
     @ExcelProperty("部门名称")
     private String deptName;
@@ -92,18 +84,10 @@ public class OaUniversalRespVO {
     @ExcelProperty("当前审核人用户id")
     private Long currentAuditUserId;
 
-    @Schema(description = "当前审核人用户uuid")
-    @ExcelProperty("当前审核人用户uuid")
-    private String currentAuditUserUuid;
-
     @Schema(description = "当前审核人员工id")
     @ExcelProperty("当前审核人员工id")
     private Long currentAuditEmployeeId;
 
-    @Schema(description = "当前审核人员工uuid")
-    @ExcelProperty("当前审核人员工uuid")
-    private String currentAuditEmployeeUuid;
-
     @Schema(description = "当前审核人员工姓名")
     @ExcelProperty("当前审核人员工姓名")
     private String currentAuditEmployeeName;

+ 0 - 4
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/universal/OaUniversalMapper.java

@@ -19,11 +19,9 @@ public interface OaUniversalMapper extends BaseMapperX<OaUniversalDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<OaUniversalDO>()
                 .eqIfPresent(OaUniversalDO::getUniversalId, reqVO.getUniversalId())
                 .eqIfPresent(OaUniversalDO::getEmployeeId, reqVO.getEmployeeId())
-                .eqIfPresent(OaUniversalDO::getEmployeeUuid, reqVO.getEmployeeUuid())
                 .likeIfPresent(OaUniversalDO::getEmployeeName, reqVO.getEmployeeName())
                 .likeIfPresent(OaUniversalDO::getEmployeePhone, reqVO.getEmployeePhone())
                 .eqIfPresent(OaUniversalDO::getUserId, reqVO.getUserId())
-                .eqIfPresent(OaUniversalDO::getUserUuid, reqVO.getUserUuid())
                 .likeIfPresent(OaUniversalDO::getUserPhone, reqVO.getUserPhone())
                 .eqIfPresent(OaUniversalDO::getDeptId, reqVO.getDeptId())
                 .eqIfPresent(OaUniversalDO::getDeptUuid, reqVO.getDeptUuid())
@@ -34,9 +32,7 @@ public interface OaUniversalMapper extends BaseMapperX<OaUniversalDO> {
                 .eqIfPresent(OaUniversalDO::getProcInstId, reqVO.getProcInstId())
                 .eqIfPresent(OaUniversalDO::getAuditStatus, reqVO.getAuditStatus())
                 .eqIfPresent(OaUniversalDO::getCurrentAuditUserId, reqVO.getCurrentAuditUserId())
-                .eqIfPresent(OaUniversalDO::getCurrentAuditUserUuid, reqVO.getCurrentAuditUserUuid())
                 .eqIfPresent(OaUniversalDO::getCurrentAuditEmployeeId, reqVO.getCurrentAuditEmployeeId())
-                .eqIfPresent(OaUniversalDO::getCurrentAuditEmployeeUuid, reqVO.getCurrentAuditEmployeeUuid())
                 .betweenIfPresent(OaUniversalDO::getFinalAuditDate, reqVO.getFinalAuditDate())
                 .eqIfPresent(OaUniversalDO::getInfoSource, reqVO.getInfoSource())
                 .betweenIfPresent(OaUniversalDO::getCreateTime, reqVO.getCreateTime())

+ 25 - 39
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/business/OaBusinessService.java

@@ -1,11 +1,11 @@
 package cn.iocoder.yudao.module.bpm.service.oa.business;
 
-import javax.validation.*;
-
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo.OaBusinessPageReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo.OaBusinessRespVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo.OaBusinessSaveReqVO;
-import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.business.OaBusinessDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
 
 /**
  * 出差流程信息 Service 接口
@@ -14,42 +14,28 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
  */
 public interface OaBusinessService {
 
-    /**
-     * 创建出差流程信息
-     *
-     * @param createReqVO 创建信息
-     * @return 编号
-     */
-    Long createOaBusiness(@Valid OaBusinessSaveReqVO createReqVO);
-
-    /**
-     * 更新出差流程信息
-     *
-     * @param updateReqVO 更新信息
-     */
-    void updateOaBusiness(@Valid OaBusinessSaveReqVO updateReqVO);
-
-    /**
-     * 删除出差流程信息
-     *
-     * @param id 编号
-     */
+    Long stagingOaBusiness(OaBusinessSaveReqVO stagingReqVO);
+
+    Long commitOaBusiness(OaBusinessSaveReqVO commitReqVO);
+
+    Long agreeOaBusiness(BpmTaskApproveReqVO agreeReqVO);
+
+    Long disagreeOaBusiness(BpmTaskReturnReqVO disagreeReqVO);
+
+    Long revocationOaBusiness(BpmTaskApproveReqVO revocationReqVO);
+
+    Long reCommitOaBusiness(OaBusinessSaveReqVO reCommitReqVO);
+
+    Long closeOaBusiness(Long id);
+
     void deleteOaBusiness(Long id);
 
-    /**
-     * 获得出差流程信息
-     *
-     * @param id 编号
-     * @return 出差流程信息
-     */
-    OaBusinessDO getOaBusiness(Long id);
-
-    /**
-     * 获得出差流程信息分页
-     *
-     * @param pageReqVO 分页查询
-     * @return 出差流程信息分页
-     */
-    PageResult<OaBusinessDO> getOaBusinessPage(OaBusinessPageReqVO pageReqVO);
+    OaBusinessRespVO getOaBusiness(Long id);
+
+    OaBusinessRespVO getOaBusinessByProcInstId(String procInstId);
+
+    PageResult<OaBusinessRespVO> getOaBusinessPage(OaBusinessPageReqVO pageReqVO);
+
+    PageResult<OaBusinessRespVO> exportOaBusinessExcel(OaBusinessPageReqVO pageReqVO);
 
 }

+ 599 - 26
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/business/OaBusinessServiceImpl.java

@@ -1,19 +1,49 @@
 package cn.iocoder.yudao.module.bpm.service.oa.business;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
+import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
 import cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo.OaBusinessPageReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo.OaBusinessRespVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo.OaBusinessSaveReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
+import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.business.OaBusinessDO;
+import cn.iocoder.yudao.module.bpm.dal.mysql.oa.business.OaBusinessMapper;
+import cn.iocoder.yudao.module.bpm.enums.DictDataConstants;
+import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants;
+import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants;
+import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
+import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.engine.TaskService;
+import org.flowable.task.api.Task;
 import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
-import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.business.OaBusinessDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-
-import cn.iocoder.yudao.module.bpm.dal.mysql.oa.business.OaBusinessMapper;
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*;
+import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_BUSINESS_NOT_EXISTS;
 
 /**
  * 出差流程信息 Service 实现类
@@ -24,49 +54,592 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*;
 @Validated
 public class OaBusinessServiceImpl implements OaBusinessService {
 
+    /**
+     * 对应的流程定义 KEY
+     */
+    public static final String PROCESS_KEY = "oa_business";
+
     @Resource
     private OaBusinessMapper oaBusinessMapper;
 
+    @Resource
+    private BpmProcessInstanceApi processInstanceApi;
+
+    @Resource
+    private BpmTaskService bpmTaskService;
+
+    @Resource
+    private TaskService taskService;
+
+    @Resource
+    private FileApi fileApi;
+
+    @Resource
+    private AdminUserApi adminUserApi;
+
+    @Resource
+    private DeptApi deptApi;
+
     @Override
-    public Long createOaBusiness(OaBusinessSaveReqVO createReqVO) {
-        // 插入
-        OaBusinessDO oaBusiness = BeanUtils.toBean(createReqVO, OaBusinessDO.class);
-        oaBusinessMapper.insert(oaBusiness);
-        // 返回
+    @Transactional
+    public Long stagingOaBusiness(OaBusinessSaveReqVO stagingReqVO) {
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
+        Objects.requireNonNull(loginUser, "登录用户不能为空");
+        // 转正人信息
+        AdminUserRespDTO employee = adminUserApi.getUser(stagingReqVO.getEmployeeId());
+
+        OaBusinessDO oaBusiness = BeanUtils.toBean(stagingReqVO, OaBusinessDO.class);
+        if (StringUtils.isBlank(oaBusiness.getBusinessId())) {
+            // 创建单据uuid
+            String uuid = IdUtil.fastSimpleUUID();
+            oaBusiness.setBusinessId(uuid);
+        }
+        if (employee != null) {
+            oaBusiness.setEmployeeId(loginUser.getId());
+            oaBusiness.setEmployeeName(loginUser.getNickname());
+            oaBusiness.setEmployeePhone(loginUser.getMobile());
+            oaBusiness.setDeptId(loginUser.getDeptId());
+            oaBusiness.setPosition("员工职位");
+            oaBusiness.setUserId(loginUser.getId());
+        }
+        oaBusiness.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
+        oaBusiness.setInfoSource("0");
+        oaBusiness.setApplyEmployeeId(loginUser.getId());
+        oaBusiness.setApplyEmployeeName(loginUser.getNickname());
+        // 暂存不保存审批人信息
+        oaBusiness.setStartUserSelectAssignees(null);
+        // 保存或更新表单信息
+        if (oaBusiness.getId() == null) {
+            oaBusinessMapper.insert(oaBusiness);
+        } else {
+            oaBusinessMapper.updateById(oaBusiness);
+        }
+        // 保存业务uuid到附件中
+        saveFileList(stagingReqVO.getFileIdList(), oaBusiness.getBusinessId());
+
         return oaBusiness.getId();
     }
 
     @Override
-    public void updateOaBusiness(OaBusinessSaveReqVO updateReqVO) {
-        // 校验存在
-        validateOaBusinessExists(updateReqVO.getId());
-        // 更新
-        OaBusinessDO updateObj = BeanUtils.toBean(updateReqVO, OaBusinessDO.class);
-        oaBusinessMapper.updateById(updateObj);
+    @Transactional
+    public Long commitOaBusiness(OaBusinessSaveReqVO commitReqVO) {
+        if (CollectionUtil.isEmpty(commitReqVO.getStartUserSelectAssignees())) {
+            throw exception(ErrorCodeConstants.TASK_CREATE_FAIL_NO_START_SELECT_ASSIGNEE);
+        }
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
+        if (loginUser == null) {
+            throw exception(ErrorCodeConstants.OA_LOGIN_USER_NOT_EXISTS);
+        }
+        // 转正人信息
+        AdminUserRespDTO employee = adminUserApi.getUser(commitReqVO.getEmployeeId());
+        if (employee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
+
+
+        OaBusinessDO oaBusiness = BeanUtils.toBean(commitReqVO, OaBusinessDO.class);
+        if (StringUtils.isBlank(oaBusiness.getBusinessId())) {
+            // 创建单据uuid
+            String uuid = IdUtil.fastSimpleUUID();
+            oaBusiness.setBusinessId(uuid);
+        }
+        oaBusiness.setEmployeeId(employee.getId());
+        oaBusiness.setEmployeeName(employee.getNickname());
+        oaBusiness.setEmployeePhone(employee.getMobile());
+        oaBusiness.setDeptId(employee.getDeptId());
+        oaBusiness.setPosition("员工职位");
+        oaBusiness.setUserId(loginUser.getId());
+        oaBusiness.setInfoSource("0");
+        oaBusiness.setApplyEmployeeId(loginUser.getId());
+        oaBusiness.setApplyEmployeeName(loginUser.getNickname());
+        // 保存或更新表单信息
+        if (oaBusiness.getId() == null) {
+            oaBusinessMapper.insert(oaBusiness);
+        } else {
+            OaBusinessDO oaBusinessDO = validateOaBusinessExists(oaBusiness.getId());
+            if (StrUtil.isNotBlank(oaBusinessDO.getProcInstId())) {
+                throw exception(ErrorCodeConstants.PROCESS_INSTANCE_CREATE_FAIL_HAS_PROCESS);
+            }
+            oaBusinessMapper.updateById(oaBusiness);
+        }
+        // 发起流程
+        Map<String, Object> processInstanceVariables = new HashMap<>();
+        processInstanceVariables.put("auditPass", "true");
+        // 添加审批人信息
+        Map<String, List<Long>> startUserSelectAssignees = new HashMap<>();
+        List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
+        startUserSelectAssignees.put("approver", selectAssignees);
+        String processInstanceId = processInstanceApi
+                .createProcessInstance(loginUser.getId(),
+                        new BpmProcessInstanceCreateReqDTO()
+                                .setProcessDefinitionKey(PROCESS_KEY)
+                                .setVariables(processInstanceVariables)
+                                .setBusinessKey(String.valueOf(oaBusiness.getId()))
+                                .setStartUserSelectAssignees(startUserSelectAssignees));
+
+        //获取下一个审批人
+        Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
+
+        // 审批同意
+        BpmTaskApproveReqVO agreeReqVO = new BpmTaskApproveReqVO();
+        agreeReqVO.setId(task.getId());
+        agreeReqVO.setReason("[首次提交]");
+        agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_COMMITTED));
+        taskService.setVariable(task.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
+        taskService.setVariable(task.getId(), "auditPass", "true");
+        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+
+        Task nextTask = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
+        if (nextTask == null) {
+            throw exception(ErrorCodeConstants.TASK_CREATE_FAIL_NO_START_SELECT_ASSIGNEE);
+        }
+        Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
+        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+
+
+        // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
+        oaBusinessMapper.updateById(new OaBusinessDO()
+                .setId(oaBusiness.getId())
+                .setProcInstId(processInstanceId)
+                .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
+                .setFinalAuditDate(LocalDateTime.now())
+                .setCurrentAuditEmployeeId(currentAuditEmployeeId)
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
+        // 保存业务uuid到附件中
+        saveFileList(commitReqVO.getFileIdList(), oaBusiness.getBusinessId());
+        // TODO DP 发送提交成功站内信
+        return oaBusiness.getId();
+    }
+
+    @Override
+    @Transactional
+    public Long agreeOaBusiness(BpmTaskApproveReqVO agreeReqVO) {
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // TODO DP 根据登录人查询出对应的员工信息
+
+        Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
+        if (currentTask == null) {
+            throw exception(ErrorCodeConstants.TASK_NOT_EXISTS);
+        }
+        // 先更新为审批中
+        taskService.setVariable(currentTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
+        LambdaQueryWrapper<OaBusinessDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(OaBusinessDO::getProcInstId, currentTask.getProcessInstanceId());
+        OaBusinessDO oaBusiness = oaBusinessMapper.selectOne(lambdaQueryWrapper);
+        // 如果是最后一个人审批同意,设置流程审批状态为已审核
+        String[] auditPersons = oaBusiness.getStartUserSelectAssignees().split(",");
+        String lastAuditPerson = Arrays.stream(auditPersons)
+                .reduce((first, second) -> second)
+                .orElse(null);
+        if (currentTask.getAssignee().equals(lastAuditPerson)) {
+            // 更新为已审核(暂时未生效,未找到原因,先不处理)
+            taskService.setVariable(agreeReqVO.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITED);
+        }
+        // 审批同意
+        String reason = "[同意]";
+        if (StrUtil.isNotBlank(agreeReqVO.getReason())) {
+            reason = reason + agreeReqVO.getReason();
+        }
+        agreeReqVO.setReason(reason);
+        agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
+        taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
+        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+
+        Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
+        OaBusinessDO oaBusinessDO = new OaBusinessDO();
+        if (nextTask != null) {
+            Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
+            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+
+            // 如果审批人重复,实际未结束,再次更新为审核中
+            taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
+            oaBusinessDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
+                    .setCurrentAuditEmployeeId(currentAuditEmployeeId)
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setFinalAuditDate(LocalDateTime.now())
+                    .setId(oaBusiness.getId());
+
+        } else {
+            oaBusinessDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITED)
+                    .setCurrentAuditEmployeeId(null)
+                    .setCurrentAuditEmployeeName(null)
+                    .setFinalAuditDate(LocalDateTime.now())
+                    .setId(oaBusiness.getId());
+
+            // TODO 复制业务单据信息到业务模块单据表
+
+        }
+        oaBusinessMapper.updateById(oaBusinessDO);
+        // 发送通知
+
+        // 返回
+        return 1L;
+    }
+
+    @Override
+    @Transactional
+    public Long disagreeOaBusiness(BpmTaskReturnReqVO disagreeReqVO) {
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // TODO DP 根据登录人查询出对应的员工信息
+
+        Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
+
+        disagreeReqVO.setTargetTaskDefinitionKey("modifyApply");
+        disagreeReqVO.setReason("[驳回]" + disagreeReqVO.getReason());
+        disagreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_RETURNED));
+        taskService.setVariable(disagreeReqVO.getId(), "auditPass", "false");
+        taskService.setVariable(disagreeReqVO.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RETURNED);
+        bpmTaskService.returnTask(loginUserId, disagreeReqVO);
+
+        Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
+        Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
+        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+
+        // 更新单据状态,当前处理人,最后处理时间
+        LambdaUpdateWrapper<OaBusinessDO> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(OaBusinessDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
+                .set(OaBusinessDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaBusinessDO::getFinalAuditDate, LocalDateTime.now())
+                .set(OaBusinessDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
+                .eq(OaBusinessDO::getProcInstId, currentTask.getProcessInstanceId());
+        oaBusinessMapper.update(updateWrapper);
+
+        // 发送通知
+
+        return 1L;
+    }
+
+    @Override
+    @Transactional
+    public Long revocationOaBusiness(BpmTaskApproveReqVO revocationReqVO) {
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // TODO DP 根据登录人查询出对应的员工信息
+
+        Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
+        if (currentTask == null) {
+            throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_NOT_EXISTS);
+        }
+        LambdaQueryWrapper<OaBusinessDO> lambdaQueryWrapper = new LambdaQueryWrapper<OaBusinessDO>()
+                .eq(OaBusinessDO::getProcInstId, currentTask.getProcessInstanceId());
+        OaBusinessDO oaBusinessDO = oaBusinessMapper.selectOne(lambdaQueryWrapper);
+        if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaBusinessDO.getAuditStatus())
+                || !Objects.equals(String.valueOf(loginUserId), oaBusinessDO.getCreator())) {
+            throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
+        }
+
+        BpmTaskReturnReqVO returnReqVO = BeanUtils.toBean(revocationReqVO, BpmTaskReturnReqVO.class);
+        returnReqVO.setTargetTaskDefinitionKey("modifyApply");
+        String reason = "[撤回]";
+        if (StrUtil.isNotBlank(returnReqVO.getReason())) {
+            reason = reason + returnReqVO.getReason();
+        }
+        returnReqVO.setReason(reason);
+        returnReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_RECALLED));
+        taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RECALLED);
+        bpmTaskService.revocationTask(loginUserId, returnReqVO);
+
+        Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
+        Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
+        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+
+        // 更新单据状态,当前处理人,最后处理时间
+        LambdaUpdateWrapper<OaBusinessDO> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(OaBusinessDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
+                .set(OaBusinessDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaBusinessDO::getFinalAuditDate, LocalDateTime.now())
+                .set(OaBusinessDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
+                .eq(OaBusinessDO::getProcInstId, currentTask.getProcessInstanceId());
+        oaBusinessMapper.update(updateWrapper);
+
+        // 发送通知
+
+        return 1L;
+    }
+
+    @Override
+    @Transactional
+    public Long reCommitOaBusiness(OaBusinessSaveReqVO reCommitReqVO) {
+        if (reCommitReqVO.getId() == null) {
+            throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
+        }
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
+        if (loginUser == null) {
+            throw exception(ErrorCodeConstants.OA_LOGIN_USER_NOT_EXISTS);
+        }
+        // 转正人信息
+        AdminUserRespDTO employee = adminUserApi.getUser(reCommitReqVO.getEmployeeId());
+        if (employee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
+
+        OaBusinessDO oaBusinessNew = BeanUtils.toBean(reCommitReqVO, OaBusinessDO.class);
+        OaBusinessDO oaBusinessOld = validateOaBusinessExists(oaBusinessNew.getId());
+        oaBusinessNew.setBusinessId(oaBusinessOld.getBusinessId())
+                .setProcInstId(oaBusinessOld.getProcInstId());
+
+        oaBusinessNew.setEmployeeId(employee.getId());
+        oaBusinessNew.setEmployeeName(employee.getNickname());
+        oaBusinessNew.setEmployeePhone(employee.getMobile());
+        oaBusinessNew.setDeptId(employee.getDeptId());
+        oaBusinessNew.setPosition("员工职位");
+        oaBusinessNew.setUserId(loginUser.getId());
+        oaBusinessNew.setApplyEmployeeId(loginUser.getId());
+        oaBusinessNew.setApplyEmployeeName(loginUser.getNickname());
+
+        Task currentTask = taskService.createTaskQuery().processInstanceId(oaBusinessNew.getProcInstId()).singleResult();
+        BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
+        approveReqVO.setId(currentTask.getId())
+                .setReason("[再次提交]");
+        approveReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_COMMITTED));
+        if (CollectionUtil.isNotEmpty(reCommitReqVO.getStartUserSelectAssignees())) {
+            // 添加审批人信息到流程参数中
+            Map<String, List<Long>> startUserSelectAssignees = new HashMap<>();
+            List<Long> selectAssignees = reCommitReqVO.getStartUserSelectAssignees();
+            startUserSelectAssignees.put("approver", selectAssignees);
+            taskService.setVariable(currentTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES, startUserSelectAssignees);
+            // 保存审批人信息
+            oaBusinessNew.setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(",")));
+        }
+        taskService.setVariable(currentTask.getId(), "auditPass", "true");
+        taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
+        // 再次提交,和审批通过逻辑相同
+        bpmTaskService.approveTask(loginUserId, approveReqVO);
+
+        Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
+        Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
+        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        oaBusinessNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
+                .setCurrentAuditEmployeeId(currentAuditEmployeeId)
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setFinalAuditDate(LocalDateTime.now());
+        oaBusinessMapper.updateById(oaBusinessNew);
+
+        // 保存业务uuid到附件中
+        saveFileList(reCommitReqVO.getFileIdList(), oaBusinessNew.getBusinessId());
+
+        return 1L;
+    }
+
+    @Override
+    @Transactional
+    public Long closeOaBusiness(Long id) {
+        if (id == null) {
+            throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
+        }
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // TODO DP 根据登录人查询出对应的员工信息
+
+        OaBusinessDO oaBusinessDO = validateOaBusinessExists(id);
+        if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaBusinessDO.getAuditStatus())
+                && !DictDataConstants.OA_AUDIT_STATUS_RECALLED.equals(oaBusinessDO.getAuditStatus())) {
+            throw exception(ErrorCodeConstants.TASK_CLOSE_NOT_ALLOWED);
+        }
+
+        Task currentTask = taskService.createTaskQuery().processInstanceId(oaBusinessDO.getProcInstId()).singleResult();
+        BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
+        approveReqVO.setId(currentTask.getId())
+                .setReason("[关闭]");
+        approveReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_CLOSED));
+        taskService.setVariable(currentTask.getId(), "auditPass", "false");
+        taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
+        // 关闭,使用审批通过的方法实现
+        bpmTaskService.approveTask(loginUserId, approveReqVO);
+
+        LambdaUpdateWrapper<OaBusinessDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        lambdaUpdateWrapper.set(OaBusinessDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
+                .set(OaBusinessDO::getCurrentAuditEmployeeId, null)
+                .set(OaBusinessDO::getCurrentAuditEmployeeName, null)
+                .set(OaBusinessDO::getFinalAuditDate, LocalDateTime.now())
+                .eq(OaBusinessDO::getId, id);
+        oaBusinessMapper.update(lambdaUpdateWrapper);
+        return 1L;
     }
 
     @Override
     public void deleteOaBusiness(Long id) {
         // 校验存在
-        validateOaBusinessExists(id);
+        validateOaBusinessDelete(id);
         // 删除
         oaBusinessMapper.deleteById(id);
     }
 
-    private void validateOaBusinessExists(Long id) {
-        if (oaBusinessMapper.selectById(id) == null) {
-            throw exception(OA_BUSINESS_NOT_EXISTS);
+    @Override
+    public OaBusinessRespVO getOaBusiness(Long id) {
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // TODO DP 根据登录人查询出对应的员工信息
+
+        OaBusinessDO oaBusinessDO = oaBusinessMapper.selectById(id);
+        OaBusinessRespVO oaBusinessRespVO = BeanUtils.toBean(oaBusinessDO, OaBusinessRespVO.class);
+        if (oaBusinessDO.getDeptId() != null) {
+            DeptRespDTO dept = deptApi.getDept(oaBusinessDO.getDeptId());
+            if (dept != null) {
+                oaBusinessRespVO.setDeptName(dept.getName());
+            }
+        }
+
+        String procInstId = oaBusinessDO.getProcInstId();
+        if (StrUtil.isNotBlank(procInstId)) {
+            Task task = taskService.createTaskQuery()
+                    .processInstanceId(procInstId)
+                    .taskAssignee(String.valueOf(loginUserId))
+                    .singleResult();
+            if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaBusinessDO.getAuditStatus())) {
+                // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
+                task = taskService.createTaskQuery()
+                        .processInstanceId(procInstId)
+                        .singleResult();
+            }
+            if (task != null) {
+                oaBusinessRespVO.setTaskId(task.getId());
+            }
+        }
+
+        // 附件列表
+        List<FileDTO> fileList = fileApi.getFileDTOListByBiz(oaBusinessDO.getBusinessId());
+        oaBusinessRespVO.setFileList(fileList);
+
+        // 审批记录
+        if (StrUtil.isNotBlank(oaBusinessDO.getProcInstId())) {
+            List<BpmTaskRespVO> auditRecordList = bpmTaskService.getAuditRecordListByProcessInstanceId(oaBusinessDO.getProcInstId());
+            oaBusinessRespVO.setAuditRecordList(auditRecordList);
+        }
+
+        // 审批人
+        String startUserSelectAssignees = oaBusinessDO.getStartUserSelectAssignees();
+        if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
+            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+                    .map(Long::valueOf).collect(Collectors.toList());
+            List<AdminUserRespDTO> userList = adminUserApi.getUserList(userIdList);
+            List<AdminUserRespDTO> auditUserList = new ArrayList<>();
+            for (Long userId : userIdList) {
+                for (AdminUserRespDTO adminUserRespDTO : userList) {
+                    if (Objects.equals(userId, adminUserRespDTO.getId())) {
+                        auditUserList.add(adminUserRespDTO);
+                        break;
+                    }
+                }
+            }
+            oaBusinessRespVO.setAuditUserList(auditUserList);
+        }
+
+        return oaBusinessRespVO;
+    }
+
+    @Override
+    public OaBusinessRespVO getOaBusinessByProcInstId(String procInstId) {
+        OaBusinessDO oaBusinessDO = oaBusinessMapper.selectOne(OaBusinessDO::getProcInstId, procInstId);
+        OaBusinessRespVO oaBusinessRespVO = BeanUtils.toBean(oaBusinessDO, OaBusinessRespVO.class);
+        if (oaBusinessDO.getDeptId() != null) {
+            DeptRespDTO dept = deptApi.getDept(oaBusinessDO.getDeptId());
+            if (dept != null) {
+                oaBusinessRespVO.setDeptName(dept.getName());
+            }
+        }
+
+        // 附件列表
+        List<FileDTO> fileList = fileApi.getFileDTOListByBiz(oaBusinessDO.getBusinessId());
+        oaBusinessRespVO.setFileList(fileList);
+
+        // 审批记录
+        if (StrUtil.isNotBlank(oaBusinessDO.getProcInstId())) {
+            List<BpmTaskRespVO> auditRecordList = bpmTaskService.getAuditRecordListByProcessInstanceId(oaBusinessDO.getProcInstId());
+            oaBusinessRespVO.setAuditRecordList(auditRecordList);
         }
+
+        // 审批人
+        String startUserSelectAssignees = oaBusinessDO.getStartUserSelectAssignees();
+        if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
+            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+                    .map(Long::valueOf).collect(Collectors.toList());
+            List<AdminUserRespDTO> userList = adminUserApi.getUserList(userIdList);
+            List<AdminUserRespDTO> auditUserList = new ArrayList<>();
+            for (Long userId : userIdList) {
+                for (AdminUserRespDTO adminUserRespDTO : userList) {
+                    if (Objects.equals(userId, adminUserRespDTO.getId())) {
+                        auditUserList.add(adminUserRespDTO);
+                        break;
+                    }
+                }
+            }
+            oaBusinessRespVO.setAuditUserList(auditUserList);
+        }
+
+        return oaBusinessRespVO;
     }
 
     @Override
-    public OaBusinessDO getOaBusiness(Long id) {
-        return oaBusinessMapper.selectById(id);
+    public PageResult<OaBusinessRespVO> getOaBusinessPage(OaBusinessPageReqVO pageReqVO) {
+        PageResult<OaBusinessDO> oaBusinessDOPageResult = oaBusinessMapper.selectPage(pageReqVO);
+        PageResult<OaBusinessRespVO> oaBusinessRespVOPageResult = BeanUtils.toBean(oaBusinessDOPageResult, OaBusinessRespVO.class);
+
+        List<OaBusinessRespVO> oaBusinessRespVOList = oaBusinessRespVOPageResult.getList();
+        if (CollectionUtil.isNotEmpty(oaBusinessRespVOList)) {
+            List<Long> employeeIdList = oaBusinessRespVOList.stream().map(OaBusinessRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
+            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            for (OaBusinessRespVO respVO : oaBusinessRespVOList) {
+                for (AdminUserRespDTO employee : employeeList) {
+                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
+                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
+                        break;
+                    }
+                }
+            }
+
+            List<Long> deptIdList = oaBusinessRespVOList.stream().map(OaBusinessRespVO::getDeptId).collect(Collectors.toList());
+            List<DeptRespDTO> deptList = deptApi.getDeptList(deptIdList);
+            for (OaBusinessRespVO respVO : oaBusinessRespVOList) {
+                for (DeptRespDTO dept : deptList) {
+                    if (dept.getId() != null && dept.getId().equals(respVO.getDeptId())) {
+                        respVO.setDeptName(dept.getName());
+                        break;
+                    }
+                }
+            }
+        }
+
+        return oaBusinessRespVOPageResult;
     }
 
     @Override
-    public PageResult<OaBusinessDO> getOaBusinessPage(OaBusinessPageReqVO pageReqVO) {
-        return oaBusinessMapper.selectPage(pageReqVO);
+    public PageResult<OaBusinessRespVO> exportOaBusinessExcel(OaBusinessPageReqVO pageReqVO) {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        return getOaBusinessPage(pageReqVO);
+    }
+
+    private void validateOaBusinessDelete(Long id) {
+        OaBusinessDO oaBusinessDO = validateOaBusinessExists(id);
+        if (!DictDataConstants.OA_AUDIT_STATUS_STAGING.equals(oaBusinessDO.getAuditStatus())) {
+            throw exception(ErrorCodeConstants.DELETE_FAIL_NOT_STAGING);
+        }
+    }
+
+    private OaBusinessDO validateOaBusinessExists(Long id) {
+        OaBusinessDO oaBusinessDO = oaBusinessMapper.selectById(id);
+        if (oaBusinessDO == null) {
+            throw exception(OA_BUSINESS_NOT_EXISTS);
+        }
+        return oaBusinessDO;
+    }
+
+    /**
+     * 保存业务uuid到附件中
+     */
+    private void saveFileList(List<Long> fileIdList, String serviceId) {
+        if (CollectionUtil.isNotEmpty(fileIdList) && StrUtil.isNotEmpty(serviceId)) {
+            fileApi.updateFileBiz(fileIdList, serviceId);
+        }
     }
 
 }

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/conversion/OaConversionServiceImpl.java

@@ -55,7 +55,7 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_CONVERSION
 public class OaConversionServiceImpl implements OaConversionService {
 
     /**
-     * OA 转正对应的流程定义 KEY
+     * 对应的流程定义 KEY
      */
     public static final String PROCESS_KEY = "oa_conversion";
 

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/entry/OaEntryServiceImpl.java

@@ -56,7 +56,7 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_ENTRY_NOT_
 public class OaEntryServiceImpl implements OaEntryService {
 
     /**
-     * OA 入职对应的流程定义 KEY
+     * 对应的流程定义 KEY
      */
     public static final String PROCESS_KEY = "oa_entry";
 

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/leave/OaLeaveServiceImpl.java

@@ -56,7 +56,7 @@ public class OaLeaveServiceImpl implements OaLeaveService {
 
 
     /**
-     * OA 请假对应的流程定义 KEY
+     * 对应的流程定义 KEY
      */
     public static final String PROCESS_KEY = "oa_leave";
 

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/renew/OaRenewServiceImpl.java

@@ -56,7 +56,7 @@ public class OaRenewServiceImpl implements OaRenewService {
 
 
     /**
-     * OA 合同续签对应的流程定义 KEY
+     * 对应的流程定义 KEY
      */
     public static final String PROCESS_KEY = "oa_renew";
 

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/turnover/OaTurnoverServiceImpl.java

@@ -56,7 +56,7 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
 
 
     /**
-     * OA 离职对应的流程定义 KEY
+     * 对应的流程定义 KEY
      */
     public static final String PROCESS_KEY = "oa_turnover";
 

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/universal/OaUniversalServiceImpl.java

@@ -55,7 +55,7 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_UNIVERSAL_
 public class OaUniversalServiceImpl implements OaUniversalService {
 
     /**
-     * OA 合同续签对应的流程定义 KEY
+     * 对应的流程定义 KEY
      */
     public static final String PROCESS_KEY = "oa_universal";