Преглед изворни кода

通用事项流程提交和暂存接口分离改造

dongpo пре 1 година
родитељ
комит
f01317dccb
14 измењених фајлова са 225 додато и 153 уклоњено
  1. 12 0
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
  2. 39 0
      yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/DictDataConstants.java
  3. 4 0
      yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/DictTypeConstants.java
  4. 2 2
      yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java
  5. 35 16
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/OaUniversalController.java
  6. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalPageReqVO.java
  7. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalRespVO.java
  8. 6 63
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalSaveReqVO.java
  9. 2 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java
  10. 5 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/universal/OaUniversalDO.java
  11. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/universal/OaUniversalMapper.java
  12. 12 10
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/universal/OaUniversalService.java
  13. 104 55
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/universal/OaUniversalServiceImpl.java
  14. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/sql/create_tables.sql

+ 12 - 0
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java

@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.springframework.util.Assert;
 
@@ -23,16 +24,19 @@ public class CommonResult<T> implements Serializable {
      *
      * @see ErrorCode#getCode()
      */
+    @Schema(description = "状态码")
     private Integer code;
     /**
      * 返回数据
      */
+    @Schema(description = "返回的数据")
     private T data;
     /**
      * 错误提示,用户可阅读
      *
      * @see ErrorCode#getMsg() ()
      */
+    @Schema(description = "提示信息")
     private String msg;
 
     /**
@@ -68,6 +72,14 @@ public class CommonResult<T> implements Serializable {
         return result;
     }
 
+    public static <T> CommonResult<T> success(T data, String msg) {
+        CommonResult<T> result = new CommonResult<>();
+        result.code = GlobalErrorCodeConstants.SUCCESS.getCode();
+        result.data = data;
+        result.msg = msg;
+        return result;
+    }
+
     public static boolean isSuccess(Integer code) {
         return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode());
     }

+ 39 - 0
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/DictDataConstants.java

@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.bpm.enums;
+
+/**
+ * BPM 字典数据的枚举类
+ *
+ * @author dp
+ */
+public interface DictDataConstants {
+
+    /**
+     * 暂存状态
+     */
+    String OA_AUDIT_STATUS_STAGING = "0";
+    /**
+     * 已提交状态
+     */
+    String OA_AUDIT_STATUS_SUBMITTED = "1";
+    /**
+     * 审核中状态
+     */
+    String OA_AUDIT_STATUS_AUDITING = "2";
+    /**
+     * 已审核状态
+     */
+    String OA_AUDIT_STATUS_AUDITED = "3";
+    /**
+     * 已关闭状态
+     */
+    String OA_AUDIT_STATUS_CLOSED = "4";
+    /**
+     * 已驳回状态
+     */
+    String OA_AUDIT_STATUS_REJECTED = "5";
+    /**
+     * 已撤回状态
+     */
+    String OA_AUDIT_STATUS_RECALLED = "6";
+    
+}

+ 4 - 0
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/DictTypeConstants.java

@@ -10,4 +10,8 @@ public interface DictTypeConstants {
     String TASK_ASSIGN_RULE_TYPE = "bpm_task_assign_rule_type"; // 任务分配规则类型
     String TASK_ASSIGN_SCRIPT = "bpm_task_assign_script"; // 任务分配自定义脚本
 
+    /**
+     * 流程审核状态
+     */
+    String BPM_TASK_AUDIT_STATUS = "bpm_task_audit_status";
 }

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java

@@ -99,7 +99,7 @@ public interface ErrorCodeConstants {
     ErrorCode OA_DIMISSION_NOT_EXISTS = new ErrorCode(1009017004, "离职流程信息不存在");
     // ========== 请假流程信息 1-009_017_005 ==========
     ErrorCode OA_HOLIDAY_NOT_EXISTS = new ErrorCode(1009017005, "请假流程信息不存在");
-    // ========== 通用审批流程信息 1-009_017_006 ==========
-    ErrorCode OA_UNIVERSAL_NOT_EXISTS = new ErrorCode(1009017006, "通用审批流程信息不存在");
+    // ========== 通用事项审批流程信息 1-009_017_006 ==========
+    ErrorCode OA_UNIVERSAL_NOT_EXISTS = new ErrorCode(1009017006, "通用事项审批流程信息不存在");
 
 }

+ 35 - 16
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/OaUniversalController.java

@@ -1,9 +1,12 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.universal;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 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.universal.vo.OaUniversalPageReqVO;
@@ -12,9 +15,12 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.universal.vo.OaUniversalS
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.universal.OaUniversalDO;
 import cn.iocoder.yudao.module.bpm.service.oa.universal.OaUniversalService;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+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.springframework.core.annotation.Order;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -29,7 +35,7 @@ import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPOR
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 
-@Tag(name = "管理后台 - 通用审批流程信息")
+@Tag(name = "管理后台 - 通用事项审批流程信息")
 @RestController
 @RequestMapping("/bpm/oa-universal")
 @Validated
@@ -38,29 +44,42 @@ public class OaUniversalController {
     @Resource
     private OaUniversalService oaUniversalService;
 
-    @PostMapping("/start")
-    @Operation(summary = "提交或暂存通用审批流程信息")
-    @PreAuthorize("@ss.hasPermission('bpm:oa-Universal:start')")
-    public CommonResult<Long> startOaUniversal(@Valid @RequestBody OaUniversalSaveReqVO createReqVO) {
-        return success(oaUniversalService.startOaUniversal(getLoginUserId(), createReqVO));
+    @PostMapping("/commit")
+    @Operation(summary = "提交通用事项审批流程信息")
+    @ApiOperationSupport(order = 1)
+    @PreAuthorize("@ss.hasPermission('bpm:oa-universal:commit')")
+    public CommonResult<Long> commitOaUniversal(@Valid @RequestBody OaUniversalSaveReqVO createReqVO) {
+        if (CollectionUtil.isEmpty(createReqVO.getStartUserSelectAssignees())) {
+            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST.getCode(),"请选择审批人");
+        }
+        Long oaUniversalId = oaUniversalService.commitOaUniversal(createReqVO);
+        return success(oaUniversalId, "提交成功");
+    }
+    @PostMapping("/staging")
+    @Operation(summary = "暂存通用事项审批流程信息")
+    @ApiOperationSupport(order = 2)
+    @PreAuthorize("@ss.hasPermission('bpm:oa-universal:staging')")
+    public CommonResult<Long> startOaUniversal(@RequestBody OaUniversalSaveReqVO createReqVO) {
+        Long oaUniversalId = oaUniversalService.stagingOaUniversal(createReqVO);
+        return success(oaUniversalId, "暂存成功");
     }
 
     @PostMapping("/completeTure")
-    @Operation(summary = "审批同意通用审批流程信息")
+    @Operation(summary = "审批同意通用事项审批流程信息")
     @PreAuthorize("@ss.hasPermission('bpm:oa-entry:complete-true')")
     public CommonResult<Long> completeTrueOaUniversal(@Valid @RequestBody BpmTaskApproveReqVO reqVO) {
         return success(oaUniversalService.completeTrueOaUniversal(getLoginUserId(), reqVO));
     }
 
     @PostMapping("/completeFalse")
-    @Operation(summary = "驳回或撤回通用审批流程信息")
+    @Operation(summary = "驳回或撤回通用事项审批流程信息")
     @PreAuthorize("@ss.hasPermission('bpm:oa-entry:complete-false')")
     public CommonResult<Long> completeFalseOaUniversal(@Valid @RequestBody BpmTaskApproveReqVO reqVO) {
         return success(oaUniversalService.completeFalseOaUniversal(getLoginUserId(), reqVO));
     }
 
     @PostMapping("/updateComplete")
-    @Operation(summary = "驳回和撤回后再次提交或关闭通用审批流程信息")
+    @Operation(summary = "驳回和撤回后再次提交或关闭通用事项审批流程信息")
     @PreAuthorize("@ss.hasPermission('bpm:oa-entry:update-complete')")
     public CommonResult<Long> updateCompleteOaUniversal(@Valid @RequestBody OaUniversalSaveReqVO createReqVO) {
         return success(oaUniversalService.updateCompleteOaUniversal(getLoginUserId(), createReqVO, createReqVO.getBpmTaskApproveReqVO()));
@@ -68,14 +87,14 @@ public class OaUniversalController {
 
 
     @PostMapping("/create")
-    @Operation(summary = "创建通用审批流程信息")
+    @Operation(summary = "创建通用事项审批流程信息")
     @PreAuthorize("@ss.hasPermission('bpm:oa-universal:create')")
     public CommonResult<Long> createOaUniversal(@Valid @RequestBody OaUniversalSaveReqVO createReqVO) {
         return success(oaUniversalService.createOaUniversal(createReqVO));
     }
 
     @PutMapping("/update")
-    @Operation(summary = "更新通用审批流程信息")
+    @Operation(summary = "更新通用事项审批流程信息")
     @PreAuthorize("@ss.hasPermission('bpm:oa-universal:update')")
     public CommonResult<Boolean> updateOaUniversal(@Valid @RequestBody OaUniversalSaveReqVO updateReqVO) {
         oaUniversalService.updateOaUniversal(updateReqVO);
@@ -83,7 +102,7 @@ public class OaUniversalController {
     }
 
     @DeleteMapping("/delete")
-    @Operation(summary = "删除通用审批流程信息")
+    @Operation(summary = "删除通用事项审批流程信息")
     @Parameter(name = "id", description = "编号", required = true)
     @PreAuthorize("@ss.hasPermission('bpm:oa-universal:delete')")
     public CommonResult<Boolean> deleteOaUniversal(@RequestParam("id") Long id) {
@@ -92,7 +111,7 @@ public class OaUniversalController {
     }
 
     @GetMapping("/get")
-    @Operation(summary = "获得通用审批流程信息")
+    @Operation(summary = "获得通用事项审批流程信息")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('bpm:oa-universal:query')")
     public CommonResult<OaUniversalRespVO> getOaUniversal(@RequestParam("id") Long id) {
@@ -101,7 +120,7 @@ public class OaUniversalController {
     }
 
     @GetMapping("/page")
-    @Operation(summary = "获得通用审批流程信息分页")
+    @Operation(summary = "获得通用事项审批流程信息分页")
     @PreAuthorize("@ss.hasPermission('bpm:oa-universal:query')")
     public CommonResult<PageResult<OaUniversalRespVO>> getOaUniversalPage(@Valid OaUniversalPageReqVO pageReqVO) {
         PageResult<OaUniversalDO> pageResult = oaUniversalService.getOaUniversalPage(pageReqVO);
@@ -109,7 +128,7 @@ public class OaUniversalController {
     }
 
     @GetMapping("/export-excel")
-    @Operation(summary = "导出通用审批流程信息 Excel")
+    @Operation(summary = "导出通用事项审批流程信息 Excel")
     @PreAuthorize("@ss.hasPermission('bpm:oa-universal:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportOaUniversalExcel(@Valid OaUniversalPageReqVO pageReqVO,
@@ -117,7 +136,7 @@ public class OaUniversalController {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<OaUniversalDO> list = oaUniversalService.getOaUniversalPage(pageReqVO).getList();
         // 导出 Excel
-        ExcelUtils.write(response, "通用审批流程信息.xls", "数据", OaUniversalRespVO.class,
+        ExcelUtils.write(response, "通用事项审批流程信息.xls", "数据", OaUniversalRespVO.class,
                         BeanUtils.toBean(list, OaUniversalRespVO.class));
     }
 

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

@@ -11,7 +11,7 @@ import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
-@Schema(description = "管理后台 - 通用审批流程信息分页 Request VO")
+@Schema(description = "管理后台 - 通用事项审批流程信息分页 Request VO")
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)

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

@@ -12,7 +12,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 import java.time.LocalDateTime;
 import java.util.List;
 
-@Schema(description = "管理后台 - 通用审批流程信息 Response VO")
+@Schema(description = "管理后台 - 通用事项审批流程信息 Response VO")
 @Data
 @ExcelIgnoreUnannotated
 public class OaUniversalRespVO {

+ 6 - 63
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalSaveReqVO.java

@@ -4,85 +4,29 @@ import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveR
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.List;
 
-@Schema(description = "管理后台 - 通用审批流程信息新增/修改 Request VO")
+@Schema(description = "管理后台 - 通用事项审批流程信息新增/修改 Request VO")
 @Data
 public class OaUniversalSaveReqVO {
 
-    @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.AUTO, example = "1")
     private Long id;
 
-    @Schema(description = "uuid", example = "12260")
-    private String universalId;
-
-    @Schema(description = "申请人id", example = "14065")
-    private Long employeeId;
-
-    @Schema(description = "申请人uuid", example = "8771")
-    private String employeeUuid;
-
-    @Schema(description = "申请员工姓名", example = "芋艿")
-    private String employeeName;
-
-    @Schema(description = "申请员工手机号", example = "13900000000")
-    private String employeePhone;
-
-    @Schema(description = "申请用户账号id", example = "1")
-    private Long userId;
-
-    @Schema(description = "申请用户账号uuid", example = "28769")
-    private String userUuid;
-
-    @Schema(description = "申请用户账号手机号", example = "13900000000")
-    private String userPhone;
-
-    @Schema(description = "部门id", example = "1")
-    private Long deptId;
-
-    @Schema(description = "部门uuid", example = "18681")
-    private String deptUuid;
-
-    @Schema(description = "职位")
-    private String position;
-
     @Schema(description = "申请事项标题", example = "申请事项标题,最多20字")
-    @NotNull(message = "申请事项标题不能为空")
+    @NotEmpty(message = "申请事项标题不能为空")
     private String title;
 
     @Schema(description = "详细描述", example = "详细描述,最多200字")
-    @NotNull(message = "详细描述不能为空")
+    @NotEmpty(message = "详细描述不能为空")
     private String description;
 
     @Schema(description = "备注", example = "备注,最多200字")
     private String remarks;
 
-    @Schema(description = "流程实例id", example = "18345")
-    private String procInstId;
-
-    @Schema(description = "审核状态(0暂存、1已提交、2审核中、3已审核、4已关闭、5已驳回)", example = "1")
-    private String auditStatus;
-
-    @Schema(description = "当前审核人用户id", example = "31811")
-    private Long currentAuditUserId;
-
-    @Schema(description = "当前审核人用户uuid", example = "23687")
-    private String currentAuditUserUuid;
-
-    @Schema(description = "当前审核人员工id", example = "2375")
-    private Long currentAuditEmployeeId;
-
-    @Schema(description = "当前审核人员工uuid", example = "13039")
-    private String currentAuditEmployeeUuid;
-
-    @Schema(description = "数据来源,0流程添加、1手动添加", example = "0")
-    private String infoSource;
-
-    @Schema(description = "审批,true 通过,false 驳回", example = "true")
-    private Boolean auditPass;
-
-    @Schema(description = "发起人自选审批人 Map", example = " [1, 1]")
+    @Schema(description = "发起人选择审批人id集合", example = "[100, 1]")
     private List<Long> startUserSelectAssignees;
 
     @Schema(description = "附件主键id集合", example = "[1, 2]")
@@ -91,5 +35,4 @@ public class OaUniversalSaveReqVO {
     @Schema(description = "审批信息")
     private BpmTaskApproveReqVO bpmTaskApproveReqVO;
 
-
 }

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java

@@ -19,10 +19,10 @@ public class BpmTaskApproveReqVO {
     @NotEmpty(message = "审批意见不能为空")
     private String reason;
 
-    @Schema(description = "抄送的用户编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2")
+    @Schema(description = "抄送的用户编号数组", requiredMode = Schema.RequiredMode.AUTO)
     private Collection<Long> copyUserIds;
 
-    @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.AUTO)
     private Map<String, Object> variables;
 
 }

+ 5 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/universal/OaUniversalDO.java

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.annotation.*;
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 
 /**
- * 通用审批流程信息 DO
+ * 通用事项审批流程信息 DO
  *
  * @author dp
  */
@@ -112,6 +112,10 @@ public class OaUniversalDO extends BaseDO {
      * 最后审核时间
      */
     private LocalDateTime finalAuditDate;
+    /**
+     * 申请人选择的审批人
+     */
+    private String startUserSelectAssignees;
     /**
      * 数据来源,0流程添加、1手动添加
      */

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

@@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.universal.OaUniversalDO;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
- * 通用审批流程信息 Mapper
+ * 通用事项审批流程信息 Mapper
  *
  * @author dp
  */

+ 12 - 10
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/universal/OaUniversalService.java

@@ -11,13 +11,15 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import javax.validation.Valid;
 
 /**
- * 通用审批流程信息 Service 接口
+ * 通用事项审批流程信息 Service 接口
  *
  * @author dp
  */
-public interface OaUniversalService extends IService<OaUniversalDO> {
+public interface OaUniversalService {
 
-    Long startOaUniversal(Long userId, @Valid OaUniversalSaveReqVO createReqVO);
+    Long commitOaUniversal(OaUniversalSaveReqVO createReqVO);
+
+    Long stagingOaUniversal(OaUniversalSaveReqVO createReqVO);
 
     Long completeTrueOaUniversal(Long userId, BpmTaskApproveReqVO reqVO);
 
@@ -27,7 +29,7 @@ public interface OaUniversalService extends IService<OaUniversalDO> {
 
 
     /**
-     * 创建通用审批流程信息
+     * 创建通用事项审批流程信息
      *
      * @param createReqVO 创建信息
      * @return 编号
@@ -35,32 +37,32 @@ public interface OaUniversalService extends IService<OaUniversalDO> {
     Long createOaUniversal(@Valid OaUniversalSaveReqVO createReqVO);
 
     /**
-     * 更新通用审批流程信息
+     * 更新通用事项审批流程信息
      *
      * @param updateReqVO 更新信息
      */
     void updateOaUniversal(@Valid OaUniversalSaveReqVO updateReqVO);
 
     /**
-     * 删除通用审批流程信息
+     * 删除通用事项审批流程信息
      *
      * @param id 编号
      */
     void deleteOaUniversal(Long id);
 
     /**
-     * 获得通用审批流程信息
+     * 获得通用事项审批流程信息
      *
      * @param id 编号
-     * @return 通用审批流程信息
+     * @return 通用事项审批流程信息
      */
     OaUniversalRespVO getOaUniversal(Long id);
 
     /**
-     * 获得通用审批流程信息分页
+     * 获得通用事项审批流程信息分页
      *
      * @param pageReqVO 分页查询
-     * @return 通用审批流程信息分页
+     * @return 通用事项审批流程信息分页
      */
     PageResult<OaUniversalDO> getOaUniversalPage(OaUniversalPageReqVO pageReqVO);
 

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

@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+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.universal.vo.OaUniversalPageReqVO;
@@ -14,9 +16,12 @@ 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.universal.OaUniversalDO;
 import cn.iocoder.yudao.module.bpm.dal.mysql.oa.universal.OaUniversalMapper;
+import cn.iocoder.yudao.module.bpm.enums.DictDataConstants;
 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.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
@@ -28,22 +33,20 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+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.OA_UNIVERSAL_NOT_EXISTS;
 
 /**
- * 通用审批流程信息 Service 实现类
+ * 通用事项审批流程信息 Service 实现类
  *
  * @author dp
  */
 @Service
 @Validated
-public class OaUniversalServiceImpl extends ServiceImpl<OaUniversalMapper, OaUniversalDO> implements OaUniversalService {
+public class OaUniversalServiceImpl implements OaUniversalService {
 
     /**
      * OA 合同续签对应的流程定义 KEY
@@ -66,66 +69,103 @@ public class OaUniversalServiceImpl extends ServiceImpl<OaUniversalMapper, OaUni
     @Resource
     private FileApi fileApi;
 
+    @Resource
+    private AdminUserApi adminUserApi;
+
     @Override
-    @Transactional
-    public Long startOaUniversal(Long userId, OaUniversalSaveReqVO createReqVO) {
-        //判断是否已经发起流程
-        Boolean auditPass = createReqVO.getAuditPass();
-        // 创建单据uuid
-        String uuid = IdUtil.fastSimpleUUID();
+    public Long commitOaUniversal(OaUniversalSaveReqVO createReqVO) {
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
+        Objects.requireNonNull(loginUser, "登录用户不能为空");
+        // TODO DP 根据登录人查询出对应的员工信息
+
         OaUniversalDO oaUniversal = BeanUtils.toBean(createReqVO, OaUniversalDO.class);
         if (StringUtils.isBlank(oaUniversal.getUniversalId())) {
+            // 创建单据uuid
+            String uuid = IdUtil.fastSimpleUUID();
             oaUniversal.setUniversalId(uuid);
         }
+        oaUniversal.setEmployeeId(loginUser.getId());
+        oaUniversal.setEmployeeName(loginUser.getNickname());
+        oaUniversal.setEmployeePhone(loginUser.getMobile());
+        oaUniversal.setDeptId(loginUser.getDeptId());
+        oaUniversal.setPosition("员工职位");
+        oaUniversal.setUserId(loginUser.getId());
+        oaUniversal.setUserPhone(loginUser.getMobile());
+        oaUniversal.setInfoSource("0");
         // 保存或更新表单信息
-        this.saveOrUpdate(oaUniversal);
-
-        // 提交
-        if (auditPass) {
-            // 发起 BPM 流程
-            Map<String, Object> processInstanceVariables = new HashMap<>();
-            processInstanceVariables.put("auditPass", auditPass);
-            //添加审批人信息
-            Map<String, List<Long>> startUserSelectAssignees = new HashMap<>();
-            startUserSelectAssignees.put("approver", createReqVO.getStartUserSelectAssignees());
-            String processInstanceId = processInstanceApi
-                    .createProcessInstance(userId,
-                            new BpmProcessInstanceCreateReqDTO()
-                                    .setProcessDefinitionKey(PROCESS_KEY)
-                                    .setVariables(processInstanceVariables)
-                                    .setBusinessKey(String.valueOf(oaUniversal.getId()))
-                                    .setStartUserSelectAssignees(startUserSelectAssignees));
-
-            //获取下一个审批人
-            Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
-
-            // 将工作流的编号,单据状态 最后一次审批时间 当前审批人  更新到 OA 转正中
-            oaUniversalMapper.updateById(new OaUniversalDO()
-                    .setId(oaUniversal.getId())
-                    .setProcInstId(processInstanceId)
-                    .setAuditStatus("1")
-                    .setUniversalId(uuid)
-                    .setFinalAuditDate(LocalDateTime.now())
-                    .setCurrentAuditEmployeeId(Long.valueOf(task.getAssignee())));
-
-            // TODO dp 发送通知
-
-        }else {
-            // 暂存,不发起流程
-            // 将单据状态 更新到 OA转正中
-            oaUniversalMapper.updateById(new OaUniversalDO()
-                    .setId(oaUniversal.getId())
-                    .setAuditStatus("0"));
+        if (oaUniversal.getId() == null) {
+            oaUniversalMapper.insert(oaUniversal);
+        } else {
+            oaUniversalMapper.updateById(oaUniversal);
         }
-
+        // 发起流程
+        Map<String, Object> processInstanceVariables = new HashMap<>();
+        processInstanceVariables.put("auditPass", true);
+        // 添加审批人信息
+        Map<String, List<Long>> startUserSelectAssignees = new HashMap<>();
+        List<Long> selectAssignees = createReqVO.getStartUserSelectAssignees();
+        startUserSelectAssignees.put("approver", selectAssignees);
+        String processInstanceId = processInstanceApi
+                .createProcessInstance(loginUser.getId(),
+                        new BpmProcessInstanceCreateReqDTO()
+                                .setProcessDefinitionKey(PROCESS_KEY)
+                                .setVariables(processInstanceVariables)
+                                .setBusinessKey(String.valueOf(oaUniversal.getId()))
+                                .setStartUserSelectAssignees(startUserSelectAssignees));
+
+        //获取下一个审批人
+        Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
+        // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
+        oaUniversalMapper.updateById(new OaUniversalDO()
+                .setId(oaUniversal.getId())
+                .setProcInstId(processInstanceId)
+                .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_SUBMITTED)
+                .setFinalAuditDate(LocalDateTime.now())
+                .setCurrentAuditEmployeeId(Long.valueOf(task.getAssignee()))
+                .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
-        if (CollectionUtil.isNotEmpty(createReqVO.getFileIdList())) {
-            fileApi.updateFileBiz(createReqVO.getFileIdList(), oaUniversal.getUniversalId());
+        saveFileList(createReqVO.getFileIdList(), oaUniversal.getUniversalId());
+        // TODO DP 发送提交成功站内信
+        return oaUniversal.getId();
+    }
+
+    @Override
+    public Long stagingOaUniversal(OaUniversalSaveReqVO createReqVO) {
+        // 登录人信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
+        Objects.requireNonNull(loginUser, "登录用户不能为空");
+        // TODO DP 根据登录人查询出对应的员工信息
+
+        OaUniversalDO oaUniversal = BeanUtils.toBean(createReqVO, OaUniversalDO.class);
+        if (StringUtils.isBlank(oaUniversal.getUniversalId())) {
+            // 创建单据uuid
+            String uuid = IdUtil.fastSimpleUUID();
+            oaUniversal.setUniversalId(uuid);
         }
+        oaUniversal.setEmployeeId(loginUser.getId());
+        oaUniversal.setEmployeeName(loginUser.getNickname());
+        oaUniversal.setEmployeePhone(loginUser.getMobile());
+        oaUniversal.setDeptId(loginUser.getDeptId());
+        oaUniversal.setPosition("员工职位");
+        oaUniversal.setUserId(loginUser.getId());
+        oaUniversal.setUserPhone(loginUser.getMobile());
+        oaUniversal.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
+        oaUniversal.setInfoSource("0");
+        // 保存或更新表单信息
+        if (oaUniversal.getId() == null) {
+            oaUniversalMapper.insert(oaUniversal);
+        } else {
+            oaUniversalMapper.updateById(oaUniversal);
+        }
+        // 保存业务uuid到附件中
+        saveFileList(createReqVO.getFileIdList(), oaUniversal.getUniversalId());
 
-        // 返回
         return oaUniversal.getId();
     }
+
     @Override
     public Long completeTrueOaUniversal(Long userId, BpmTaskApproveReqVO reqVO) {
         Task currentTask = bpmTaskService.getTask(reqVO.getId());
@@ -185,7 +225,7 @@ public class OaUniversalServiceImpl extends ServiceImpl<OaUniversalMapper, OaUni
     @Override
     public Long updateCompleteOaUniversal(Long userId, OaUniversalSaveReqVO createReqVO, BpmTaskApproveReqVO reqVO) {
         // 判断是否已经发起流程
-        Boolean auditPass = createReqVO.getAuditPass();
+        Boolean auditPass = true;
 
         OaUniversalDO oaUniversal = BeanUtils.toBean(createReqVO, OaUniversalDO.class);
 
@@ -269,4 +309,13 @@ public class OaUniversalServiceImpl extends ServiceImpl<OaUniversalMapper, OaUni
         return oaUniversalMapper.selectPage(pageReqVO);
     }
 
+    /**
+     * 保存业务uuid到附件中
+     */
+    private void saveFileList(List<Long> fileIdList, String serviceId) {
+        if (CollectionUtil.isNotEmpty(fileIdList)) {
+            fileApi.updateFileBiz(fileIdList, serviceId);
+        }
+    }
+
 }

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/sql/create_tables.sql

@@ -210,4 +210,4 @@ CREATE TABLE IF NOT EXISTS "bpm_oa_universal" (
     "deleted" bit NOT NULL DEFAULT FALSE,
     "tenant_id" bigint NOT NULL DEFAULT 0,
     PRIMARY KEY ("id")
-    ) COMMENT '通用审批流程信息表';
+    ) COMMENT '通用事项审批流程信息表';