浏览代码

Merge remote-tracking branch 'origin/lc_saas' into master_20240722

dongpo 1 年之前
父节点
当前提交
9461b161c2
共有 59 个文件被更改,包括 1580 次插入1251 次删除
  1. 8 6
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/business/vo/OaBusinessPageReqVO.java
  2. 11 7
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/business/vo/OaBusinessRespVO.java
  3. 2 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/conversion/vo/OaConversionPageReqVO.java
  4. 6 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/conversion/vo/OaConversionRespVO.java
  5. 2 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/entry/vo/OaEntryPageReqVO.java
  6. 8 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/entry/vo/OaEntryRespVO.java
  7. 4 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/entry/vo/OaEntrySaveReqVO.java
  8. 7 6
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/expense/vo/OaExpensePageReqVO.java
  9. 6 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/expense/vo/OaExpenseRespVO.java
  10. 2 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/leave/vo/OaLeavePageReqVO.java
  11. 9 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/leave/vo/OaLeaveRespVO.java
  12. 7 8
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/out/vo/OaOutPageReqVO.java
  13. 11 7
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/out/vo/OaOutRespVO.java
  14. 2 3
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/purchase/vo/OaPurchasePageReqVO.java
  15. 11 7
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/purchase/vo/OaPurchaseRespVO.java
  16. 7 9
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/receive/vo/OaReceivePageReqVO.java
  17. 6 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/receive/vo/OaReceiveRespVO.java
  18. 7 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/renew/vo/OaRenewPageReqVO.java
  19. 6 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/renew/vo/OaRenewRespVO.java
  20. 2 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/stamp/vo/OaStampPageReqVO.java
  21. 6 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/stamp/vo/OaStampRespVO.java
  22. 2 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/turnover/vo/OaTurnoverPageReqVO.java
  23. 9 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/turnover/vo/OaTurnoverRespVO.java
  24. 9 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/business/OaBusinessDO.java
  25. 4 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/conversion/OaConversionDO.java
  26. 4 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/entry/OaEntryDO.java
  27. 9 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/expense/OaExpenseDO.java
  28. 8 3
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/leave/OaLeaveDO.java
  29. 9 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/out/OaOutDO.java
  30. 9 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/purchase/OaPurchaseDO.java
  31. 9 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/receive/OaReceiveDO.java
  32. 4 0
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/renew/OaRenewDO.java
  33. 9 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/stamp/OaStampDO.java
  34. 9 5
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/turnover/OaTurnoverDO.java
  35. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/business/OaBusinessMapper.java
  36. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/conversion/OaConversionMapper.java
  37. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/entry/OaEntryMapper.java
  38. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/expense/OaExpenseMapper.java
  39. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/leave/OaLeaveMapper.java
  40. 1 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/out/OaOutMapper.java
  41. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/purchase/OaPurchaseMapper.java
  42. 1 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/receive/OaReceiveMapper.java
  43. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/renew/OaRenewMapper.java
  44. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/stamp/OaStampMapper.java
  45. 1 1
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/turnover/OaTurnOverMapper.java
  46. 119 99
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/business/OaBusinessServiceImpl.java
  47. 121 96
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/conversion/OaConversionServiceImpl.java
  48. 72 64
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/entry/OaEntryServiceImpl.java
  49. 122 108
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/expense/OaExpenseServiceImpl.java
  50. 118 102
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/leave/OaLeaveServiceImpl.java
  51. 117 103
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/out/OaOutServiceImpl.java
  52. 120 106
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/purchase/OaPurchaseServiceImpl.java
  53. 120 106
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/receive/OaReceiveServiceImpl.java
  54. 150 104
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/renew/OaRenewServiceImpl.java
  55. 116 102
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/stamp/OaStampServiceImpl.java
  56. 138 102
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/turnover/OaTurnoverServiceImpl.java
  57. 6 19
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/universal/OaUniversalServiceImpl.java
  58. 10 0
      yudao-module-personnel/yudao-module-employee-api/src/main/java/cn/iocoder/yudao/module/employee/api/dto/EmployeeRespDTO.java
  59. 16 1
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/api/info/EmployeeApiImpl.java

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

@@ -1,11 +1,13 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.business.vo;
 
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import java.math.BigDecimal;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -37,8 +39,8 @@ public class OaBusinessPageReqVO extends PageParam {
     @Schema(description = "部门id", example = "708")
     private Long deptId;
 
-    @Schema(description = "职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "出差事由", example = "不香")
     private String reason;

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

@@ -1,16 +1,16 @@
 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.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.util.*;
+import lombok.Data;
+
 import java.math.BigDecimal;
-import org.springframework.format.annotation.DateTimeFormat;
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
+import java.util.List;
 
 @Schema(description = "管理后台 - 出差流程信息 Response VO")
 @Data
@@ -45,6 +45,10 @@ public class OaBusinessRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "职位")
     @ExcelProperty("职位")
     private String position;
@@ -104,7 +108,7 @@ public class OaBusinessRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/conversion/vo/OaConversionPageReqVO.java

@@ -25,8 +25,8 @@ public class OaConversionPageReqVO extends PageParam {
     @Schema(description = "部门id", example = "14341")
     private Long deptId;
 
-    @Schema(description = "职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "转正日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

+ 6 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/conversion/vo/OaConversionRespVO.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.conversion.vo;
 
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -48,6 +49,10 @@ public class OaConversionRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "职位")
     @ExcelProperty("职位")
     private String position;
@@ -119,7 +124,7 @@ public class OaConversionRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/entry/vo/OaEntryPageReqVO.java

@@ -20,8 +20,8 @@ public class OaEntryPageReqVO extends PageParam {
     @Schema(description = "部门", example = "2937")
     private String deptId;
 
-    @Schema(description = "职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "员工类型", example = "1")
     private String employeeType;

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

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.entry.vo;
 
 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -13,6 +14,8 @@ import java.util.List;
 import com.alibaba.excel.annotation.*;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotBlank;
+
 @Schema(description = "管理后台 - 入职流程信息 Response VO")
 @Data
 @ExcelIgnoreUnannotated
@@ -38,6 +41,10 @@ public class OaEntryRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "职位")
     @ExcelProperty("职位")
     private String position;
@@ -130,7 +137,7 @@ public class OaEntryRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 4 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/entry/vo/OaEntrySaveReqVO.java

@@ -23,8 +23,11 @@ public class OaEntrySaveReqVO {
     @NotBlank(message = "部门不能为空")
     private String deptId;
 
+    @Schema(description = "职位id", example = "1")
+    @NotBlank(message = "职位id不能为空")
+    private Long postId;
+
     @Schema(description = "职位")
-    @NotBlank(message = "职位不能为空")
     private String position;
 
     @Schema(description = "员工类型", example = "1")

+ 7 - 6
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/expense/vo/OaExpensePageReqVO.java

@@ -1,11 +1,12 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.expense.vo;
 
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import java.math.BigDecimal;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
+
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -25,8 +26,8 @@ public class OaExpensePageReqVO extends PageParam {
     @Schema(description = "部门id")
     private Long deptId;
 
-    @Schema(description = "员工职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "报销类型主键id")
     private Long expenseTypeId;

+ 6 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/expense/vo/OaExpenseRespVO.java

@@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.expense.vo;
 
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.expense.OaExpenseObjDO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -46,6 +46,10 @@ public class OaExpenseRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "员工职位")
     @ExcelProperty("员工职位")
     private String position;
@@ -116,7 +120,7 @@ public class OaExpenseRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/leave/vo/OaLeavePageReqVO.java

@@ -23,8 +23,8 @@ public class OaLeavePageReqVO extends PageParam {
     @Schema(description = "部门id", example = "115")
     private Long deptId;
 
-    @Schema(description = "员工职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "请假类型", example = "事假")
     private String leaveType;

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

@@ -1,16 +1,16 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.leave.vo;
 
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
+import lombok.Data;
 
 import java.time.LocalDateTime;
 import java.util.List;
 
-import com.alibaba.excel.annotation.*;
-
 @Schema(description = "管理后台 - 请假流程信息 Response VO")
 @Data
 @ExcelIgnoreUnannotated
@@ -47,6 +47,10 @@ public class OaLeaveRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "员工职位")
     @ExcelProperty("员工职位")
     private String position;
@@ -126,7 +130,7 @@ public class OaLeaveRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 7 - 8
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/out/vo/OaOutPageReqVO.java

@@ -1,10 +1,12 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.out.vo;
 
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
+
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -27,14 +29,11 @@ public class OaOutPageReqVO extends PageParam {
     @Schema(description = "外出员工手机号")
     private String employeePhone;
 
-    @Schema(description = "用户账号id", example = "32289")
-    private Long userId;
-
     @Schema(description = "部门id", example = "31013")
     private Long deptId;
 
-    @Schema(description = "员工职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "外出事由", example = "不香")
     private String reason;

+ 11 - 7
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/out/vo/OaOutRespVO.java

@@ -1,15 +1,15 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.out.vo;
 
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.util.*;
-import org.springframework.format.annotation.DateTimeFormat;
+import lombok.Data;
+
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
+import java.util.List;
 
 @Schema(description = "管理后台 - 公务外出流程信息 Response VO")
 @Data
@@ -48,6 +48,10 @@ public class OaOutRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "员工职位")
     @ExcelProperty("员工职位")
     private String position;
@@ -115,7 +119,7 @@ public class OaOutRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 2 - 3
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/purchase/vo/OaPurchasePageReqVO.java

@@ -7,7 +7,6 @@ import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -27,8 +26,8 @@ public class OaPurchasePageReqVO extends PageParam {
     @Schema(description = "部门id", example = "32213")
     private Long deptId;
 
-    @Schema(description = "员工职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "预期供应商", example = "赵六")
     private String supplierName;

+ 11 - 7
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/purchase/vo/OaPurchaseRespVO.java

@@ -2,16 +2,16 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.purchase.vo;
 
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.purchase.OaPurchaseObjDO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.util.*;
+import lombok.Data;
+
 import java.math.BigDecimal;
-import org.springframework.format.annotation.DateTimeFormat;
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
+import java.util.List;
 
 @Schema(description = "管理后台 - 采购流程信息 Response VO")
 @Data
@@ -46,6 +46,10 @@ public class OaPurchaseRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "员工职位")
     @ExcelProperty("员工职位")
     private String position;
@@ -108,7 +112,7 @@ public class OaPurchaseRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 7 - 9
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/receive/vo/OaReceivePageReqVO.java

@@ -1,11 +1,12 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.receive.vo;
 
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
+
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
@@ -26,17 +27,14 @@ public class OaReceivePageReqVO extends PageParam {
     @Schema(description = "领用员工手机号")
     private String employeePhone;
 
-    @Schema(description = "用户账号id", example = "13756")
-    private Long userId;
-
     @Schema(description = "部门id", example = "17336")
     private Long deptId;
 
     @Schema(description = "部门名称")
     private String deptName;
 
-    @Schema(description = "员工职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "领用日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)

+ 6 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/receive/vo/OaReceiveRespVO.java

@@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.receive.vo;
 
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
 import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.receive.OaReceiveObjDO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -49,6 +49,10 @@ public class OaReceiveRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "员工职位")
     @ExcelProperty("员工职位")
     private String position;
@@ -111,7 +115,7 @@ public class OaReceiveRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 7 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/renew/vo/OaRenewPageReqVO.java

@@ -1,10 +1,12 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.renew.vo;
 
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
+
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -24,8 +26,8 @@ public class OaRenewPageReqVO extends PageParam {
     @Schema(description = "部门id", example = "28162")
     private Long deptId;
 
-    @Schema(description = "职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "续签开始日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

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

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.renew.vo;
 
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -48,6 +49,10 @@ public class OaRenewRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "职位")
     @ExcelProperty("职位")
     private String position;
@@ -127,7 +132,7 @@ public class OaRenewRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/stamp/vo/OaStampPageReqVO.java

@@ -26,8 +26,8 @@ public class OaStampPageReqVO extends PageParam {
     @Schema(description = "部门id", example = "30975")
     private Long deptId;
 
-    @Schema(description = "员工职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "用印标题")
     private String stampTitle;

+ 6 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/stamp/vo/OaStampRespVO.java

@@ -1,8 +1,8 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.stamp.vo;
 
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -44,6 +44,10 @@ public class OaStampRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "员工职位")
     @ExcelProperty("员工职位")
     private String position;
@@ -111,7 +115,7 @@ public class OaStampRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/turnover/vo/OaTurnoverPageReqVO.java

@@ -23,8 +23,8 @@ public class OaTurnoverPageReqVO extends PageParam {
     @Schema(description = "部门id", example = "24445")
     private Long deptId;
 
-    @Schema(description = "职位")
-    private String position;
+    @Schema(description = "职位id")
+    private Long postId;
 
     @Schema(description = "离职日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

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

@@ -1,16 +1,16 @@
 package cn.iocoder.yudao.module.bpm.controller.admin.oa.turnover.vo;
 
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
+import lombok.Data;
 
 import java.time.LocalDateTime;
 import java.util.List;
 
-import com.alibaba.excel.annotation.*;
-
 @Schema(description = "管理后台 - 离职流程信息 Response VO")
 @Data
 @ExcelIgnoreUnannotated
@@ -59,6 +59,10 @@ public class OaTurnoverRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id", example = "1")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "职位")
     @ExcelProperty("职位")
     private String position;
@@ -122,7 +126,7 @@ public class OaTurnoverRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 9 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/business/OaBusinessDO.java

@@ -1,13 +1,13 @@
 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa.business;
 
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
-import java.util.*;
+
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 
 /**
  * 出差流程信息 DO
@@ -65,6 +65,10 @@ public class OaBusinessDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 职位
      */

+ 4 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/conversion/OaConversionDO.java

@@ -64,6 +64,10 @@ public class OaConversionDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 职位
      */

+ 4 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/entry/OaEntryDO.java

@@ -42,6 +42,10 @@ public class OaEntryDO extends BaseDO {
      * 部门
      */
     private Long deptId;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 职位
      */

+ 9 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/expense/OaExpenseDO.java

@@ -1,13 +1,13 @@
 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa.expense;
 
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
-import java.util.*;
+
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 
 /**
  * 报销流程信息 DO
@@ -65,6 +65,10 @@ public class OaExpenseDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 员工职位
      */

+ 8 - 3
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/leave/OaLeaveDO.java

@@ -1,12 +1,13 @@
 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa.leave;
 
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
 
 import java.time.LocalDateTime;
 
-import com.baomidou.mybatisplus.annotation.*;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-
 /**
  * 请假流程信息 DO
  *
@@ -63,6 +64,10 @@ public class OaLeaveDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 职位
      */

+ 9 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/out/OaOutDO.java

@@ -1,12 +1,12 @@
 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa.out;
 
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
+
 import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 
 /**
  * 公务外出流程信息 DO
@@ -64,6 +64,10 @@ public class OaOutDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 员工职位
      */

+ 9 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/purchase/OaPurchaseDO.java

@@ -1,13 +1,13 @@
 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa.purchase;
 
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
-import java.util.*;
+
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 
 /**
  * 采购流程信息 DO
@@ -65,6 +65,10 @@ public class OaPurchaseDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 员工职位
      */

+ 9 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/receive/OaReceiveDO.java

@@ -1,12 +1,12 @@
 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa.receive;
 
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
+
 import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 
 /**
  * 领用流程信息 DO
@@ -64,6 +64,10 @@ public class OaReceiveDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 员工职位
      */

+ 4 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/renew/OaRenewDO.java

@@ -64,6 +64,10 @@ public class OaRenewDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 职位
      */

+ 9 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/stamp/OaStampDO.java

@@ -1,12 +1,12 @@
 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa.stamp;
 
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
+
 import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 
 /**
  * 用印流程信息 DO
@@ -64,6 +64,10 @@ public class OaStampDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 员工职位
      */

+ 9 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/turnover/OaTurnoverDO.java

@@ -1,12 +1,12 @@
 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa.turnover;
 
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
+
 import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
-import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 
 /**
  * 离职流程信息 DO
@@ -64,6 +64,10 @@ public class OaTurnoverDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 职位
      */

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

@@ -24,7 +24,7 @@ public interface OaBusinessMapper extends BaseMapperX<OaBusinessDO> {
                 .eqIfPresent(OaBusinessDO::getEmployeePhone, reqVO.getEmployeePhone())
                 .eqIfPresent(OaBusinessDO::getUserId, reqVO.getUserId())
                 .eqIfPresent(OaBusinessDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaBusinessDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaBusinessDO::getPostId, reqVO.getPostId())
                 .eqIfPresent(OaBusinessDO::getReason, reqVO.getReason())
                 .eqIfPresent(OaBusinessDO::getDestination, reqVO.getDestination())
                 .betweenIfPresent(OaBusinessDO::getStartDate, reqVO.getStartDate())

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

@@ -19,7 +19,7 @@ public interface OaConversionMapper extends BaseMapperX<OaConversionDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<OaConversionDO>()
                 .eqIfPresent(OaConversionDO::getEmployeeName, reqVO.getEmployeeName())
                 .eqIfPresent(OaConversionDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaConversionDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaConversionDO::getPostId, reqVO.getPostId())
                 .likeIfPresent(OaConversionDO::getEmployeePhone, reqVO.getEmployeePhone())
                 .betweenIfPresent(OaConversionDO::getConversionDate, reqVO.getConversionDate())
                 .eqIfPresent(OaConversionDO::getApplyEmployeeName, reqVO.getApplyEmployeeName())

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

@@ -19,7 +19,7 @@ public interface OaEntryMapper extends BaseMapperX<OaEntryDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<OaEntryDO>()
                 .likeIfPresent(OaEntryDO::getEntryName, reqVO.getEntryName())
                 .eqIfPresent(OaEntryDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaEntryDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaEntryDO::getPostId, reqVO.getPostId())
                 .eqIfPresent(OaEntryDO::getEmployeeType, reqVO.getEmployeeType())
                 .eqIfPresent(OaEntryDO::getGender, reqVO.getGender())
                 .eqIfPresent(OaEntryDO::getContactNumber, reqVO.getContactNumber())

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

@@ -20,7 +20,7 @@ public interface OaExpenseMapper extends BaseMapperX<OaExpenseDO> {
                 .likeIfPresent(OaExpenseDO::getEmployeeName, reqVO.getEmployeeName())
                 .likeIfPresent(OaExpenseDO::getEmployeePhone, reqVO.getEmployeePhone())
                 .eqIfPresent(OaExpenseDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaExpenseDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaExpenseDO::getPostId, reqVO.getPostId())
                 .eqIfPresent(OaExpenseDO::getExpenseTypeId, reqVO.getExpenseTypeId())
                 .eqIfPresent(OaExpenseDO::getAuditStatus, reqVO.getAuditStatus())
                 .likeIfPresent(OaExpenseDO::getApplyEmployeeName, reqVO.getApplyEmployeeName())

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

@@ -20,7 +20,7 @@ public interface OaLeaveMapper extends BaseMapperX<OaLeaveDO> {
                 .likeIfPresent(OaLeaveDO::getEmployeeName, reqVO.getEmployeeName())
                 .likeIfPresent(OaLeaveDO::getEmployeePhone, reqVO.getEmployeePhone())
                 .eqIfPresent(OaLeaveDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaLeaveDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaLeaveDO::getPostId, reqVO.getPostId())
                 .eqIfPresent(OaLeaveDO::getLeaveType, reqVO.getLeaveType())
                 .betweenIfPresent(OaLeaveDO::getStartDate, reqVO.getStartDate())
                 .betweenIfPresent(OaLeaveDO::getEndDate, reqVO.getEndDate())

+ 1 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/out/OaOutMapper.java

@@ -21,9 +21,8 @@ public interface OaOutMapper extends BaseMapperX<OaOutDO> {
                 .eqIfPresent(OaOutDO::getEmployeeId, reqVO.getEmployeeId())
                 .likeIfPresent(OaOutDO::getEmployeeName, reqVO.getEmployeeName())
                 .eqIfPresent(OaOutDO::getEmployeePhone, reqVO.getEmployeePhone())
-                .eqIfPresent(OaOutDO::getUserId, reqVO.getUserId())
                 .eqIfPresent(OaOutDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaOutDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaOutDO::getPostId, reqVO.getPostId())
                 .eqIfPresent(OaOutDO::getReason, reqVO.getReason())
                 .eqIfPresent(OaOutDO::getDestination, reqVO.getDestination())
                 .betweenIfPresent(OaOutDO::getStartDate, reqVO.getStartDate())

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

@@ -20,7 +20,7 @@ public interface OaPurchaseMapper extends BaseMapperX<OaPurchaseDO> {
                 .likeIfPresent(OaPurchaseDO::getEmployeeName, reqVO.getEmployeeName())
                 .eqIfPresent(OaPurchaseDO::getEmployeePhone, reqVO.getEmployeePhone())
                 .eqIfPresent(OaPurchaseDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaPurchaseDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaPurchaseDO::getPostId, reqVO.getPostId())
                 .likeIfPresent(OaPurchaseDO::getSupplierName, reqVO.getSupplierName())
                 .eqIfPresent(OaPurchaseDO::getAuditStatus, reqVO.getAuditStatus())
                 .likeIfPresent(OaPurchaseDO::getApplyEmployeeName, reqVO.getApplyEmployeeName())

+ 1 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/receive/OaReceiveMapper.java

@@ -20,9 +20,8 @@ public interface OaReceiveMapper extends BaseMapperX<OaReceiveDO> {
                 .eqIfPresent(OaReceiveDO::getEmployeeId, reqVO.getEmployeeId())
                 .likeIfPresent(OaReceiveDO::getEmployeeName, reqVO.getEmployeeName())
                 .eqIfPresent(OaReceiveDO::getEmployeePhone, reqVO.getEmployeePhone())
-                .eqIfPresent(OaReceiveDO::getUserId, reqVO.getUserId())
                 .eqIfPresent(OaReceiveDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaReceiveDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaReceiveDO::getPostId, reqVO.getPostId())
                 .betweenIfPresent(OaReceiveDO::getReceiveDate, reqVO.getReceiveDate())
                 .eqIfPresent(OaReceiveDO::getProcInstId, reqVO.getProcInstId())
                 .eqIfPresent(OaReceiveDO::getAuditStatus, reqVO.getAuditStatus())

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

@@ -20,7 +20,7 @@ public interface OaRenewMapper extends BaseMapperX<OaRenewDO> {
                 .likeIfPresent(OaRenewDO::getEmployeeName, reqVO.getEmployeeName())
                 .likeIfPresent(OaRenewDO::getEmployeePhone, reqVO.getEmployeePhone())
                 .eqIfPresent(OaRenewDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaRenewDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaRenewDO::getPostId, reqVO.getPostId())
                 .betweenIfPresent(OaRenewDO::getRenewContractStartDate, reqVO.getRenewContractStartDate())
                 .betweenIfPresent(OaRenewDO::getRenewContractEndDate, reqVO.getRenewContractEndDate())
                 .eqIfPresent(OaRenewDO::getAuditStatus, reqVO.getAuditStatus())

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

@@ -20,7 +20,7 @@ public interface OaStampMapper extends BaseMapperX<OaStampDO> {
                 .likeIfPresent(OaStampDO::getEmployeeName, reqVO.getEmployeeName())
                 .likeIfPresent(OaStampDO::getEmployeePhone, reqVO.getEmployeePhone())
                 .eqIfPresent(OaStampDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaStampDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaStampDO::getPostId, reqVO.getPostId())
                 .likeIfPresent(OaStampDO::getStampTitle, reqVO.getStampTitle())
                 .eqIfPresent(OaStampDO::getAuditStatus, reqVO.getAuditStatus())
                 .likeIfPresent(OaStampDO::getApplyEmployeeName, reqVO.getApplyEmployeeName())

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

@@ -20,7 +20,7 @@ public interface OaTurnOverMapper extends BaseMapperX<OaTurnoverDO> {
                 .likeIfPresent(OaTurnoverDO::getEmployeeName, reqVO.getEmployeeName())
                 .likeIfPresent(OaTurnoverDO::getEmployeePhone, reqVO.getEmployeePhone())
                 .eqIfPresent(OaTurnoverDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaTurnoverDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaTurnoverDO::getPostId, reqVO.getPostId())
                 .betweenIfPresent(OaTurnoverDO::getTurnoverDate, reqVO.getTurnoverDate())
                 .eqIfPresent(OaTurnoverDO::getAuditStatus, reqVO.getAuditStatus())
                 .likeIfPresent(OaTurnoverDO::getApplyEmployeeName, reqVO.getApplyEmployeeName())

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

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -22,12 +23,12 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -75,20 +76,23 @@ public class OaBusinessServiceImpl implements OaBusinessService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaBusiness(OaBusinessSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(stagingReqVO.getEmployeeId());
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // 出差人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(stagingReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaBusinessDO oaBusiness = BeanUtils.toBean(stagingReqVO, OaBusinessDO.class);
         if (StringUtils.isBlank(oaBusiness.getBusinessId())) {
@@ -96,18 +100,18 @@ public class OaBusinessServiceImpl implements OaBusinessService {
             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.setEmployeeId(employee.getId());
+        oaBusiness.setEmployeeName(employee.getName());
+        oaBusiness.setEmployeePhone(employee.getPhone());
+        oaBusiness.setDeptId(employee.getDeptId());
+        oaBusiness.setPostId(employee.getPostId());
+        oaBusiness.setPosition(employee.getPosition());
+        oaBusiness.setUserId(loginUserId);
         oaBusiness.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaBusiness.setInfoSource("0");
-        oaBusiness.setApplyEmployeeId(loginUser.getId());
-        oaBusiness.setApplyEmployeeName(loginUser.getNickname());
+        oaBusiness.setApplyEmployeeId(loginEmployee.getId());
+        oaBusiness.setApplyEmployeeName(loginEmployee.getName());
+        oaBusiness.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaBusiness.setStartUserSelectAssignees(null);
         // 保存或更新表单信息
@@ -124,20 +128,18 @@ public class OaBusinessServiceImpl implements OaBusinessService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     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) {
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // 出差人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(commitReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -149,14 +151,16 @@ public class OaBusinessServiceImpl implements OaBusinessService {
             oaBusiness.setBusinessId(uuid);
         }
         oaBusiness.setEmployeeId(employee.getId());
-        oaBusiness.setEmployeeName(employee.getNickname());
-        oaBusiness.setEmployeePhone(employee.getMobile());
+        oaBusiness.setEmployeeName(employee.getName());
+        oaBusiness.setEmployeePhone(employee.getPhone());
         oaBusiness.setDeptId(employee.getDeptId());
-        oaBusiness.setPosition("员工职位");
-        oaBusiness.setUserId(loginUser.getId());
+        oaBusiness.setPostId(employee.getPostId());
+        oaBusiness.setPosition(employee.getPosition());
+        oaBusiness.setUserId(loginUserId);
         oaBusiness.setInfoSource("0");
-        oaBusiness.setApplyEmployeeId(loginUser.getId());
-        oaBusiness.setApplyEmployeeName(loginUser.getNickname());
+        oaBusiness.setApplyEmployeeId(loginEmployee.getId());
+        oaBusiness.setApplyEmployeeName(loginEmployee.getName());
+        oaBusiness.setCreator(String.valueOf(loginEmployee.getId()));
         // 保存或更新表单信息
         if (oaBusiness.getId() == null) {
             oaBusinessMapper.insert(oaBusiness);
@@ -175,7 +179,7 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -192,14 +196,14 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -209,7 +213,7 @@ public class OaBusinessServiceImpl implements OaBusinessService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaBusiness.getBusinessId());
@@ -218,11 +222,15 @@ public class OaBusinessServiceImpl implements OaBusinessService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaBusiness(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -250,19 +258,19 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(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())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaBusiness.getId());
 
@@ -273,7 +281,7 @@ public class OaBusinessServiceImpl implements OaBusinessService {
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaBusiness.getId());
 
-            // TODO 复制业务单据信息到业务模块单据表
+            // TODO DP 复制业务单据信息到业务模块单据表
 
         }
         oaBusinessMapper.updateById(oaBusinessDO);
@@ -284,11 +292,15 @@ public class OaBusinessServiceImpl implements OaBusinessService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaBusiness(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -297,16 +309,16 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         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);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaBusinessDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaBusinessDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaBusinessDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaBusinessDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaBusinessDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaBusinessDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaBusinessDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -318,11 +330,15 @@ public class OaBusinessServiceImpl implements OaBusinessService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaBusiness(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -332,7 +348,7 @@ public class OaBusinessServiceImpl implements OaBusinessService {
                 .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())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaBusinessDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -345,16 +361,16 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         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);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaBusinessDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaBusinessDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaBusinessDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaBusinessDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaBusinessDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaBusinessDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaBusinessDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -366,20 +382,18 @@ public class OaBusinessServiceImpl implements OaBusinessService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     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) {
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // 出差人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(reCommitReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -389,13 +403,14 @@ public class OaBusinessServiceImpl implements OaBusinessService {
                 .setProcInstId(oaBusinessOld.getProcInstId());
 
         oaBusinessNew.setEmployeeId(employee.getId());
-        oaBusinessNew.setEmployeeName(employee.getNickname());
-        oaBusinessNew.setEmployeePhone(employee.getMobile());
+        oaBusinessNew.setEmployeeName(employee.getName());
+        oaBusinessNew.setEmployeePhone(employee.getPhone());
         oaBusinessNew.setDeptId(employee.getDeptId());
-        oaBusinessNew.setPosition("员工职位");
-        oaBusinessNew.setUserId(loginUser.getId());
-        oaBusinessNew.setApplyEmployeeId(loginUser.getId());
-        oaBusinessNew.setApplyEmployeeName(loginUser.getNickname());
+        oaBusinessNew.setPostId(employee.getPostId());
+        oaBusinessNew.setPosition(employee.getPosition());
+        oaBusinessNew.setUserId(loginUserId);
+        oaBusinessNew.setApplyEmployeeId(loginEmployee.getId());
+        oaBusinessNew.setApplyEmployeeName(loginEmployee.getName());
 
         Task currentTask = taskService.createTaskQuery().processInstanceId(oaBusinessNew.getProcInstId()).singleResult();
         BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
@@ -414,14 +429,14 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaBusinessNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaBusinessMapper.updateById(oaBusinessNew);
 
@@ -432,14 +447,18 @@ public class OaBusinessServiceImpl implements OaBusinessService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaBusiness(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaBusinessDO oaBusinessDO = validateOaBusinessExists(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaBusinessDO.getAuditStatus())
@@ -455,7 +474,7 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaBusinessDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaBusinessDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -479,7 +498,11 @@ public class OaBusinessServiceImpl implements OaBusinessService {
     public OaBusinessRespVO getOaBusiness(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaBusinessDO oaBusinessDO = oaBusinessMapper.selectById(id);
         OaBusinessRespVO oaBusinessRespVO = BeanUtils.toBean(oaBusinessDO, OaBusinessRespVO.class);
@@ -494,7 +517,7 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaBusinessDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -520,16 +543,15 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         // 审批人
         String startUserSelectAssignees = oaBusinessDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaBusinessRespVO.setAuditUserList(auditUserList);
@@ -562,16 +584,15 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         // 审批人
         String startUserSelectAssignees = oaBusinessDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaBusinessRespVO.setAuditUserList(auditUserList);
@@ -588,13 +609,12 @@ public class OaBusinessServiceImpl implements OaBusinessService {
         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);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaBusinessRespVO respVO : oaBusinessRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 

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

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -22,12 +23,12 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -75,20 +76,25 @@ public class OaConversionServiceImpl implements OaConversionService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaConversion(OaConversionSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
+        // AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
+        // Objects.requireNonNull(loginUser, "登录用户不能为空");
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
         // 转正人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(stagingReqVO.getEmployeeId());
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(stagingReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaConversionDO oaConversion = BeanUtils.toBean(stagingReqVO, OaConversionDO.class);
         if (StringUtils.isBlank(oaConversion.getConversionId())) {
@@ -96,18 +102,18 @@ public class OaConversionServiceImpl implements OaConversionService {
             String uuid = IdUtil.fastSimpleUUID();
             oaConversion.setConversionId(uuid);
         }
-        if (employee != null) {
-            oaConversion.setEmployeeId(loginUser.getId());
-            oaConversion.setEmployeeName(loginUser.getNickname());
-            oaConversion.setEmployeePhone(loginUser.getMobile());
-            oaConversion.setDeptId(loginUser.getDeptId());
-            oaConversion.setPosition("员工职位");
-            oaConversion.setUserId(loginUser.getId());
-        }
+        oaConversion.setEmployeeId(employee.getId());
+        oaConversion.setEmployeeName(employee.getName());
+        oaConversion.setEmployeePhone(employee.getPhone());
+        oaConversion.setDeptId(employee.getDeptId());
+        oaConversion.setPostId(employee.getPostId());
+        oaConversion.setPosition(employee.getPosition());
+        oaConversion.setUserId(loginUserId);
         oaConversion.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaConversion.setInfoSource("0");
-        oaConversion.setApplyEmployeeId(loginUser.getId());
-        oaConversion.setApplyEmployeeName(loginUser.getNickname());
+        oaConversion.setApplyEmployeeId(loginEmployee.getId());
+        oaConversion.setApplyEmployeeName(loginEmployee.getName());
+        oaConversion.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaConversion.setStartUserSelectAssignees(null);
         // 保存或更新表单信息
@@ -124,24 +130,25 @@ public class OaConversionServiceImpl implements OaConversionService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaConversion(OaConversionSaveReqVO 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 loginUser = adminUserApi.getUser(loginUserId);
+        // if (loginUser == null) {
+        //     throw exception(ErrorCodeConstants.OA_LOGIN_USER_NOT_EXISTS);
+        // }
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
         // 转正人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(commitReqVO.getEmployeeId());
-        if (employee == null) {
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(commitReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
-
         OaConversionDO oaConversion = BeanUtils.toBean(commitReqVO, OaConversionDO.class);
         if (StringUtils.isBlank(oaConversion.getConversionId())) {
             // 创建单据uuid
@@ -149,14 +156,16 @@ public class OaConversionServiceImpl implements OaConversionService {
             oaConversion.setConversionId(uuid);
         }
         oaConversion.setEmployeeId(employee.getId());
-        oaConversion.setEmployeeName(employee.getNickname());
-        oaConversion.setEmployeePhone(employee.getMobile());
+        oaConversion.setEmployeeName(employee.getName());
+        oaConversion.setEmployeePhone(employee.getPhone());
         oaConversion.setDeptId(employee.getDeptId());
-        oaConversion.setPosition("员工职位");
-        oaConversion.setUserId(loginUser.getId());
+        oaConversion.setPostId(employee.getPostId());
+        oaConversion.setPosition(employee.getPosition());
+        oaConversion.setUserId(loginUserId);
         oaConversion.setInfoSource("0");
-        oaConversion.setApplyEmployeeId(loginUser.getId());
-        oaConversion.setApplyEmployeeName(loginUser.getNickname());
+        oaConversion.setApplyEmployeeId(loginEmployee.getId());
+        oaConversion.setApplyEmployeeName(loginEmployee.getName());
+        oaConversion.setCreator(String.valueOf(loginEmployee.getId()));
         // 保存或更新表单信息
         if (oaConversion.getId() == null) {
             oaConversionMapper.insert(oaConversion);
@@ -175,7 +184,7 @@ public class OaConversionServiceImpl implements OaConversionService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -192,14 +201,14 @@ public class OaConversionServiceImpl implements OaConversionService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -209,7 +218,7 @@ public class OaConversionServiceImpl implements OaConversionService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaConversion.getConversionId());
@@ -218,11 +227,15 @@ public class OaConversionServiceImpl implements OaConversionService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaConversion(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -250,19 +263,19 @@ public class OaConversionServiceImpl implements OaConversionService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaConversionDO oaConversionDO = new OaConversionDO();
         if (nextTask != null) {
             Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
             // 如果审批人重复,实际未结束,再次更新为审核中
             taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
             oaConversionDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
                     .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaConversion.getId());
 
@@ -284,11 +297,15 @@ public class OaConversionServiceImpl implements OaConversionService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaConversion(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -297,16 +314,16 @@ public class OaConversionServiceImpl implements OaConversionService {
         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);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaConversionDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaConversionDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaConversionDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaConversionDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaConversionDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaConversionDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaConversionDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -318,11 +335,15 @@ public class OaConversionServiceImpl implements OaConversionService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaConversion(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -332,7 +353,7 @@ public class OaConversionServiceImpl implements OaConversionService {
                 .eq(OaConversionDO::getProcInstId, currentTask.getProcessInstanceId());
         OaConversionDO oaConversionDO = oaConversionMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaConversionDO.getAuditStatus())
-                || !Objects.equals(String.valueOf(loginUserId), oaConversionDO.getCreator())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaConversionDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -345,16 +366,16 @@ public class OaConversionServiceImpl implements OaConversionService {
         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);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaConversionDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaConversionDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaConversionDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaConversionDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaConversionDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaConversionDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaConversionDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -366,20 +387,18 @@ public class OaConversionServiceImpl implements OaConversionService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaConversion(OaConversionSaveReqVO 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);
-        }
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
         // 转正人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(reCommitReqVO.getEmployeeId());
-        if (employee == null) {
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(reCommitReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -389,13 +408,14 @@ public class OaConversionServiceImpl implements OaConversionService {
                 .setProcInstId(oaConversionOld.getProcInstId());
 
         oaConversionNew.setEmployeeId(employee.getId());
-        oaConversionNew.setEmployeeName(employee.getNickname());
-        oaConversionNew.setEmployeePhone(employee.getMobile());
+        oaConversionNew.setEmployeeName(employee.getName());
+        oaConversionNew.setEmployeePhone(employee.getPhone());
         oaConversionNew.setDeptId(employee.getDeptId());
-        oaConversionNew.setPosition("员工职位");
-        oaConversionNew.setUserId(loginUser.getId());
-        oaConversionNew.setApplyEmployeeId(loginUser.getId());
-        oaConversionNew.setApplyEmployeeName(loginUser.getNickname());
+        oaConversionNew.setPostId(employee.getPostId());
+        oaConversionNew.setPosition(employee.getPosition());
+        oaConversionNew.setUserId(loginUserId);
+        oaConversionNew.setApplyEmployeeId(loginEmployee.getId());
+        oaConversionNew.setApplyEmployeeName(loginEmployee.getName());
 
         Task currentTask = taskService.createTaskQuery().processInstanceId(oaConversionNew.getProcInstId()).singleResult();
         BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
@@ -414,14 +434,14 @@ public class OaConversionServiceImpl implements OaConversionService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaConversionNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaConversionMapper.updateById(oaConversionNew);
 
@@ -432,14 +452,18 @@ public class OaConversionServiceImpl implements OaConversionService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaConversion(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaConversionDO oaConversionDO = validateOaConversionExists(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaConversionDO.getAuditStatus())
@@ -455,7 +479,7 @@ public class OaConversionServiceImpl implements OaConversionService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaConversionDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaConversionDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -479,7 +503,11 @@ public class OaConversionServiceImpl implements OaConversionService {
     public OaConversionRespVO getOaConversion(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaConversionDO oaConversionDO = validateOaConversionExists(id);
         OaConversionRespVO oaConversionRespVO = BeanUtils.toBean(oaConversionDO, OaConversionRespVO.class);
@@ -494,7 +522,7 @@ public class OaConversionServiceImpl implements OaConversionService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaConversionDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -520,16 +548,15 @@ public class OaConversionServiceImpl implements OaConversionService {
         // 审批人
         String startUserSelectAssignees = oaConversionDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaConversionRespVO.setAuditUserList(auditUserList);
@@ -562,16 +589,15 @@ public class OaConversionServiceImpl implements OaConversionService {
         // 审批人
         String startUserSelectAssignees = oaConversionDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaConversionRespVO.setAuditUserList(auditUserList);
@@ -588,13 +614,12 @@ public class OaConversionServiceImpl implements OaConversionService {
         List<OaConversionRespVO> oaConversionRespVOList = oaConversionRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaConversionRespVOList)) {
             List<Long> employeeIdList = oaConversionRespVOList.stream().map(OaConversionRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaConversionRespVO respVO : oaConversionRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 

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

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -22,15 +23,14 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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 liquibase.pro.packaged.L;
 import org.apache.commons.lang3.StringUtils;
 import org.flowable.engine.TaskService;
 import org.flowable.task.api.Task;
@@ -76,20 +76,22 @@ public class OaEntryServiceImpl implements OaEntryService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaEntry(OaEntrySaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // TODO DP 根据登录人查询出对应的员工信息
-        AdminUserRespDTO applyEmployee = loginUser;
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
+
         OaEntryDO oaEntry = BeanUtils.toBean(stagingReqVO, OaEntryDO.class);
         if (StringUtils.isBlank(oaEntry.getEntryId())) {
             // 创建单据uuid
@@ -98,8 +100,9 @@ public class OaEntryServiceImpl implements OaEntryService {
         }
         oaEntry.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaEntry.setInfoSource("0");
-        oaEntry.setApplyEmployeeId(applyEmployee.getId());
-        oaEntry.setApplyEmployeeName(applyEmployee.getNickname());
+        oaEntry.setApplyEmployeeId(loginEmployee.getId());
+        oaEntry.setApplyEmployeeName(loginEmployee.getName());
+        oaEntry.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaEntry.setStartUserSelectAssignees(null);
         // 保存或更新表单信息
@@ -116,17 +119,18 @@ public class OaEntryServiceImpl implements OaEntryService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaEntry(OaEntrySaveReqVO 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);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // TODO DP 根据登录人查询出对应的员工信息
-        AdminUserRespDTO applyEmployee = loginUser;
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaEntryDO oaEntry = BeanUtils.toBean(commitReqVO, OaEntryDO.class);
         if (StringUtils.isBlank(oaEntry.getEntryId())) {
@@ -135,8 +139,9 @@ public class OaEntryServiceImpl implements OaEntryService {
             oaEntry.setEntryId(uuid);
         }
         oaEntry.setInfoSource("0");
-        oaEntry.setApplyEmployeeId(applyEmployee.getId());
-        oaEntry.setApplyEmployeeName(applyEmployee.getNickname());
+        oaEntry.setApplyEmployeeId(loginEmployee.getId());
+        oaEntry.setApplyEmployeeName(loginEmployee.getName());
+        oaEntry.setCreator(String.valueOf(loginEmployee.getId()));
         // 保存或更新表单信息
         if (oaEntry.getId() == null) {
             oaEntryMapper.insert(oaEntry);
@@ -155,7 +160,7 @@ public class OaEntryServiceImpl implements OaEntryService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -172,7 +177,7 @@ public class OaEntryServiceImpl implements OaEntryService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
         if (nextTask == null) {
@@ -194,11 +199,12 @@ public class OaEntryServiceImpl implements OaEntryService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaEntry(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -226,7 +232,7 @@ public class OaEntryServiceImpl implements OaEntryService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaEntryDO oaEntryDO = new OaEntryDO();
@@ -255,11 +261,12 @@ public class OaEntryServiceImpl implements OaEntryService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaEntry(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -267,8 +274,8 @@ public class OaEntryServiceImpl implements OaEntryService {
         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);
+        taskService.setVariable(disagreeReqVO.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RETURNED);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
 
@@ -286,11 +293,12 @@ public class OaEntryServiceImpl implements OaEntryService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaEntry(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -300,7 +308,7 @@ public class OaEntryServiceImpl implements OaEntryService {
                 .eq(OaEntryDO::getProcInstId, currentTask.getProcessInstanceId());
         OaEntryDO oaEntryDO = oaEntryMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaEntryDO.getAuditStatus())
-                || !Objects.equals(String.valueOf(loginUserId), oaEntryDO.getCreator())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaEntryDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -312,8 +320,8 @@ public class OaEntryServiceImpl implements OaEntryService {
         }
         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);
+        taskService.setVariable(currentTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RECALLED);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
 
@@ -331,14 +339,15 @@ public class OaEntryServiceImpl implements OaEntryService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaEntry(OaEntrySaveReqVO reCommitReqVO) {
         if (reCommitReqVO.getId() == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         OaEntryDO oaEntryNew = BeanUtils.toBean(reCommitReqVO, OaEntryDO.class);
         OaEntryDO oaEntryOld = validateOaEntryExists(oaEntryNew.getId());
@@ -362,7 +371,7 @@ public class OaEntryServiceImpl implements OaEntryService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         oaEntryNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
@@ -377,14 +386,15 @@ public class OaEntryServiceImpl implements OaEntryService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaEntry(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         OaEntryDO oaEntryDO = validateOaEntryExists(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaEntryDO.getAuditStatus())
@@ -400,7 +410,7 @@ public class OaEntryServiceImpl implements OaEntryService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaEntryDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaEntryDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -424,7 +434,8 @@ public class OaEntryServiceImpl implements OaEntryService {
     public OaEntryRespVO getOaEntry(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         OaEntryDO oaEntryDO = validateOaEntryExists(id);
         OaEntryRespVO oaEntryRespVO = BeanUtils.toBean(oaEntryDO, OaEntryRespVO.class);
@@ -439,7 +450,7 @@ public class OaEntryServiceImpl implements OaEntryService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaEntryDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -465,16 +476,15 @@ public class OaEntryServiceImpl implements OaEntryService {
         // 审批人
         String startUserSelectAssignees = oaEntryDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaEntryRespVO.setAuditUserList(auditUserList);
@@ -507,16 +517,15 @@ public class OaEntryServiceImpl implements OaEntryService {
         // 审批人
         String startUserSelectAssignees = oaEntryDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaEntryRespVO.setAuditUserList(auditUserList);
@@ -533,13 +542,12 @@ public class OaEntryServiceImpl implements OaEntryService {
         List<OaEntryRespVO> oaEntryRespVOList = oaEntryRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaEntryRespVOList)) {
             List<Long> employeeIdList = oaEntryRespVOList.stream().map(OaEntryRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaEntryRespVO respVO : oaEntryRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 

+ 122 - 108
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/expense/OaExpenseServiceImpl.java

@@ -25,6 +25,8 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.expense.api.expenseitem.ExpenseItemApi;
 import cn.iocoder.yudao.module.expense.api.expenseitem.dto.ExpenseItemRespDTO;
 import cn.iocoder.yudao.module.expense.api.expensetype.ExpenseTypeApi;
@@ -33,8 +35,6 @@ 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;
@@ -88,7 +88,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
@@ -100,14 +100,15 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     private ExpenseItemApi expenseItemApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaExpense(OaExpenseSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(loginUserId);
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaExpenseDO oaExpense = BeanUtils.toBean(stagingReqVO, OaExpenseDO.class);
         if (StringUtils.isBlank(oaExpense.getExpenseUuid())) {
@@ -115,18 +116,18 @@ public class OaExpenseServiceImpl implements OaExpenseService {
             String uuid = IdUtil.fastSimpleUUID();
             oaExpense.setExpenseUuid(uuid);
         }
-        if (employee != null) {
-            oaExpense.setEmployeeId(loginUser.getId());
-            oaExpense.setEmployeeName(loginUser.getNickname());
-            oaExpense.setEmployeePhone(loginUser.getMobile());
-            oaExpense.setDeptId(loginUser.getDeptId());
-            oaExpense.setPosition("员工职位");
-            oaExpense.setUserId(loginUser.getId());
-        }
+        oaExpense.setEmployeeId(loginEmployee.getId());
+        oaExpense.setEmployeeName(loginEmployee.getName());
+        oaExpense.setEmployeePhone(loginEmployee.getPhone());
+        oaExpense.setDeptId(loginEmployee.getDeptId());
+        oaExpense.setPostId(loginEmployee.getPostId());
+        oaExpense.setPosition(loginEmployee.getPosition());
+        oaExpense.setUserId(loginUserId);
         oaExpense.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaExpense.setInfoSource("0");
-        oaExpense.setApplyEmployeeId(loginUser.getId());
-        oaExpense.setApplyEmployeeName(loginUser.getNickname());
+        oaExpense.setApplyEmployeeId(loginEmployee.getId());
+        oaExpense.setApplyEmployeeName(loginEmployee.getName());
+        oaExpense.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaExpense.setStartUserSelectAssignees(null);
 
@@ -150,20 +151,16 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaExpense(OaExpenseSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -174,15 +171,17 @@ public class OaExpenseServiceImpl implements OaExpenseService {
             String uuid = IdUtil.fastSimpleUUID();
             oaExpense.setExpenseUuid(uuid);
         }
-        oaExpense.setEmployeeId(employee.getId());
-        oaExpense.setEmployeeName(employee.getNickname());
-        oaExpense.setEmployeePhone(employee.getMobile());
-        oaExpense.setDeptId(employee.getDeptId());
-        oaExpense.setPosition("员工职位");
-        oaExpense.setUserId(loginUser.getId());
+        oaExpense.setEmployeeId(loginEmployee.getId());
+        oaExpense.setEmployeeName(loginEmployee.getName());
+        oaExpense.setEmployeePhone(loginEmployee.getPhone());
+        oaExpense.setDeptId(loginEmployee.getDeptId());
+        oaExpense.setPostId(loginEmployee.getPostId());
+        oaExpense.setPosition(loginEmployee.getPosition());
+        oaExpense.setUserId(loginUserId);
         oaExpense.setInfoSource("0");
-        oaExpense.setApplyEmployeeId(loginUser.getId());
-        oaExpense.setApplyEmployeeName(loginUser.getNickname());
+        oaExpense.setApplyEmployeeId(loginEmployee.getId());
+        oaExpense.setApplyEmployeeName(loginEmployee.getName());
+        oaExpense.setCreator(String.valueOf(loginEmployee.getId()));
 
         // 子表信息
         List<OaExpenseObjDO> oaExpenseObjs = commitReqVO.getOaExpenseObjs();
@@ -224,7 +223,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -241,14 +240,14 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -258,7 +257,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaExpense.getExpenseUuid());
@@ -267,11 +266,15 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaExpense(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -299,19 +302,19 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaExpenseDO oaExpenseDO = new OaExpenseDO();
         if (nextTask != null) {
             Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
             // 如果审批人重复,实际未结束,再次更新为审核中
             taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
             oaExpenseDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
                     .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaExpense.getId());
 
@@ -333,11 +336,15 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaExpense(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -346,16 +353,16 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         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);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaExpenseDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaExpenseDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaExpenseDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaExpenseDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaExpenseDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaExpenseDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaExpenseDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -367,11 +374,15 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaExpense(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -381,7 +392,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
                 .eq(OaExpenseDO::getProcInstId, currentTask.getProcessInstanceId());
         OaExpenseDO oaExpenseDO = oaExpenseMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaExpenseDO.getAuditStatus())
-                || !Objects.equals(String.valueOf(loginUserId), oaExpenseDO.getCreator())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaExpenseDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -394,16 +405,16 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         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);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaExpenseDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaExpenseDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaExpenseDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaExpenseDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaExpenseDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaExpenseDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaExpenseDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -415,20 +426,16 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaExpense(OaExpenseSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -437,14 +444,15 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         oaExpenseNew.setExpenseUuid(oaExpenseOld.getExpenseUuid())
                 .setProcInstId(oaExpenseOld.getProcInstId());
 
-        oaExpenseNew.setEmployeeId(employee.getId());
-        oaExpenseNew.setEmployeeName(employee.getNickname());
-        oaExpenseNew.setEmployeePhone(employee.getMobile());
-        oaExpenseNew.setDeptId(employee.getDeptId());
-        oaExpenseNew.setPosition("员工职位");
-        oaExpenseNew.setUserId(loginUser.getId());
-        oaExpenseNew.setApplyEmployeeId(loginUser.getId());
-        oaExpenseNew.setApplyEmployeeName(loginUser.getNickname());
+        oaExpenseNew.setEmployeeId(loginEmployee.getId());
+        oaExpenseNew.setEmployeeName(loginEmployee.getName());
+        oaExpenseNew.setEmployeePhone(loginEmployee.getPhone());
+        oaExpenseNew.setDeptId(loginEmployee.getDeptId());
+        oaExpenseNew.setPostId(loginEmployee.getPostId());
+        oaExpenseNew.setPosition(loginEmployee.getPosition());
+        oaExpenseNew.setUserId(loginUserId);
+        oaExpenseNew.setApplyEmployeeId(loginEmployee.getId());
+        oaExpenseNew.setApplyEmployeeName(loginEmployee.getName());
 
         // 子表信息
         List<OaExpenseObjDO> oaExpenseObjs = reCommitReqVO.getOaExpenseObjs();
@@ -480,14 +488,14 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaExpenseNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaExpenseMapper.updateById(oaExpenseNew);
 
@@ -503,14 +511,18 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaExpense(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaExpenseDO oaExpenseDO = oaExpenseMapper.selectById(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaExpenseDO.getAuditStatus())
@@ -526,7 +538,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaExpenseDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaExpenseDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -539,7 +551,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void deleteOaExpense(Long id) {
         // 校验存在
         validateOaExpenseDelete(id);
@@ -553,7 +565,11 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     public OaExpenseRespVO getOaExpense(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaExpenseDO oaExpenseDO = validateOaExpenseExists(id);
         OaExpenseRespVO oaExpenseRespVO = BeanUtils.toBean(oaExpenseDO, OaExpenseRespVO.class);
@@ -592,7 +608,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaExpenseDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -618,16 +634,15 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         // 审批人
         String startUserSelectAssignees = oaExpenseDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaExpenseRespVO.setAuditUserList(auditUserList);
@@ -660,16 +675,15 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         // 审批人
         String startUserSelectAssignees = oaExpenseDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaExpenseRespVO.setAuditUserList(auditUserList);
@@ -687,7 +701,14 @@ public class OaExpenseServiceImpl implements OaExpenseService {
         if (CollectionUtil.isNotEmpty(oaExpenseRespVOList)) {
             // 当前审核人名称
             List<Long> employeeIdList = oaExpenseRespVOList.stream().map(OaExpenseRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            for (OaExpenseRespVO respVO : oaExpenseRespVOList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
+                }
+            }
 
             // 部门名称
             List<Long> deptIdList = oaExpenseRespVOList.stream().map(OaExpenseRespVO::getDeptId).collect(Collectors.toList());
@@ -699,13 +720,6 @@ public class OaExpenseServiceImpl implements OaExpenseService {
 
             for (OaExpenseRespVO respVO : oaExpenseRespVOList) {
 
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
-                }
-
                 for (DeptRespDTO dept : deptList) {
                     if (dept.getId() != null && dept.getId().equals(respVO.getDeptId())) {
                         respVO.setDeptName(dept.getName());
@@ -761,7 +775,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     // private OaExpenseObjMapper oaExpenseObjMapper;
     //
     // @Override
-    // @Transactional(rollbackFor = Exception.class)
+    // @Transactional(rollbackFor = Exception.class)(rollbackFor = Exception.class)
     // public Long createOaExpense(OaExpenseSaveReqVO createReqVO) {
     //     // 插入
     //     OaExpenseDO oaExpense = BeanUtils.toBean(createReqVO, OaExpenseDO.class);
@@ -774,7 +788,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     // }
     //
     // @Override
-    // @Transactional(rollbackFor = Exception.class)
+    // @Transactional(rollbackFor = Exception.class)(rollbackFor = Exception.class)
     // public void updateOaExpense(OaExpenseSaveReqVO updateReqVO) {
     //     // 校验存在
     //     validateOaExpenseExists(updateReqVO.getId());
@@ -787,7 +801,7 @@ public class OaExpenseServiceImpl implements OaExpenseService {
     // }
     //
     // @Override
-    // @Transactional(rollbackFor = Exception.class)
+    // @Transactional(rollbackFor = Exception.class)(rollbackFor = Exception.class)
     // public void deleteOaExpense(Long id) {
     //     // 校验存在
     //     validateOaExpenseExists(id);

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

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -22,12 +23,12 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -77,20 +78,21 @@ public class OaLeaveServiceImpl implements OaLeaveService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaLeave(OaLeaveSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(loginUserId);
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaLeaveDO oaLeave = BeanUtils.toBean(stagingReqVO, OaLeaveDO.class);
         if (StringUtils.isBlank(oaLeave.getLeaveId())) {
@@ -98,18 +100,19 @@ public class OaLeaveServiceImpl implements OaLeaveService {
             String uuid = IdUtil.fastSimpleUUID();
             oaLeave.setLeaveId(uuid);
         }
-        if (employee != null) {
-            oaLeave.setEmployeeId(loginUser.getId());
-            oaLeave.setEmployeeName(loginUser.getNickname());
-            oaLeave.setEmployeePhone(loginUser.getMobile());
-            oaLeave.setDeptId(loginUser.getDeptId());
-            oaLeave.setPosition("员工职位");
-            oaLeave.setUserId(loginUser.getId());
-        }
+
+        oaLeave.setEmployeeId(loginEmployee.getId());
+        oaLeave.setEmployeeName(loginEmployee.getName());
+        oaLeave.setEmployeePhone(loginEmployee.getPhone());
+        oaLeave.setDeptId(loginEmployee.getDeptId());
+        oaLeave.setPostId(loginEmployee.getPostId());
+        oaLeave.setPosition(loginEmployee.getPosition());
+        oaLeave.setUserId(loginUserId);
         oaLeave.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaLeave.setInfoSource("0");
-        oaLeave.setApplyEmployeeId(loginUser.getId());
-        oaLeave.setApplyEmployeeName(loginUser.getNickname());
+        oaLeave.setApplyEmployeeId(loginEmployee.getId());
+        oaLeave.setApplyEmployeeName(loginEmployee.getName());
+        oaLeave.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaLeave.setStartUserSelectAssignees(null);
         // 保存或更新表单信息
@@ -125,20 +128,16 @@ public class OaLeaveServiceImpl implements OaLeaveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaLeave(OaLeaveSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -149,15 +148,17 @@ public class OaLeaveServiceImpl implements OaLeaveService {
             String uuid = IdUtil.fastSimpleUUID();
             oaLeave.setLeaveId(uuid);
         }
-        oaLeave.setEmployeeId(employee.getId());
-        oaLeave.setEmployeeName(employee.getNickname());
-        oaLeave.setEmployeePhone(employee.getMobile());
-        oaLeave.setDeptId(employee.getDeptId());
-        oaLeave.setPosition("员工职位");
-        oaLeave.setUserId(loginUser.getId());
+        oaLeave.setEmployeeId(loginEmployee.getId());
+        oaLeave.setEmployeeName(loginEmployee.getName());
+        oaLeave.setEmployeePhone(loginEmployee.getPhone());
+        oaLeave.setDeptId(loginEmployee.getDeptId());
+        oaLeave.setPostId(loginEmployee.getPostId());
+        oaLeave.setPosition(loginEmployee.getPosition());
+        oaLeave.setUserId(loginUserId);
         oaLeave.setInfoSource("0");
-        oaLeave.setApplyEmployeeId(loginUser.getId());
-        oaLeave.setApplyEmployeeName(loginUser.getNickname());
+        oaLeave.setApplyEmployeeId(loginEmployee.getId());
+        oaLeave.setApplyEmployeeName(loginEmployee.getName());
+        oaLeave.setCreator(String.valueOf(loginEmployee.getId()));
         // 保存或更新表单信息
         if (oaLeave.getId() == null) {
             oaLeaveMapper.insert(oaLeave);
@@ -176,7 +177,7 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -193,14 +194,14 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -210,7 +211,7 @@ public class OaLeaveServiceImpl implements OaLeaveService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaLeave.getLeaveId());
@@ -219,11 +220,15 @@ public class OaLeaveServiceImpl implements OaLeaveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaLeave(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -251,19 +256,19 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaLeaveDO oaLeaveDO = new OaLeaveDO();
         if (nextTask != null) {
             Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
             // 如果审批人重复,实际未结束,再次更新为审核中
             taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
             oaLeaveDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
                     .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaLeave.getId());
 
@@ -274,7 +279,7 @@ public class OaLeaveServiceImpl implements OaLeaveService {
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaLeave.getId());
 
-            // TODO 复制业务单据信息到业务模块单据表
+            // TODO DP 复制业务单据信息到业务模块单据表
 
         }
         oaLeaveMapper.updateById(oaLeaveDO);
@@ -285,11 +290,15 @@ public class OaLeaveServiceImpl implements OaLeaveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaLeave(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -298,16 +307,16 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         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);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaLeaveDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaLeaveDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaLeaveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaLeaveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaLeaveDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaLeaveDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaLeaveDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -319,11 +328,15 @@ public class OaLeaveServiceImpl implements OaLeaveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaLeave(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -346,16 +359,16 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         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);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaLeaveDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaLeaveDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaLeaveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaLeaveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaLeaveDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaLeaveDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaLeaveDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -367,20 +380,16 @@ public class OaLeaveServiceImpl implements OaLeaveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaLeave(OaLeaveSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -389,14 +398,16 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         oaLeaveNew.setLeaveId(oaLeaveOld.getLeaveId())
                 .setProcInstId(oaLeaveOld.getProcInstId());
 
-        oaLeaveNew.setEmployeeId(employee.getId());
-        oaLeaveNew.setEmployeeName(employee.getNickname());
-        oaLeaveNew.setEmployeePhone(employee.getMobile());
-        oaLeaveNew.setDeptId(employee.getDeptId());
-        oaLeaveNew.setPosition("员工职位");
-        oaLeaveNew.setUserId(loginUser.getId());
-        oaLeaveNew.setApplyEmployeeId(loginUser.getId());
-        oaLeaveNew.setApplyEmployeeName(loginUser.getNickname());
+        oaLeaveNew.setEmployeeId(loginEmployee.getId());
+        oaLeaveNew.setEmployeeName(loginEmployee.getName());
+        oaLeaveNew.setEmployeePhone(loginEmployee.getPhone());
+        oaLeaveNew.setDeptId(loginEmployee.getDeptId());
+        oaLeaveNew.setPostId(loginEmployee.getPostId());
+        oaLeaveNew.setPosition(loginEmployee.getPosition());
+        oaLeaveNew.setUserId(loginUserId);
+        oaLeaveNew.setApplyEmployeeId(loginEmployee.getId());
+        oaLeaveNew.setApplyEmployeeName(loginEmployee.getName());
+
 
         Task currentTask = taskService.createTaskQuery().processInstanceId(oaLeaveNew.getProcInstId()).singleResult();
         BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
@@ -415,14 +426,14 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaLeaveNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaLeaveMapper.updateById(oaLeaveNew);
 
@@ -433,14 +444,18 @@ public class OaLeaveServiceImpl implements OaLeaveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaLeave(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaLeaveDO oaLeaveDO = oaLeaveMapper.selectById(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaLeaveDO.getAuditStatus())
@@ -456,7 +471,7 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaLeaveDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaLeaveDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -480,7 +495,11 @@ public class OaLeaveServiceImpl implements OaLeaveService {
     public OaLeaveRespVO getOaLeave(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaLeaveDO oaLeaveDO = validateOaLeaveExists(id);
         OaLeaveRespVO oaLeaveRespVO = BeanUtils.toBean(oaLeaveDO, OaLeaveRespVO.class);
@@ -495,7 +514,7 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaLeaveDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -521,16 +540,15 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         // 审批人
         String startUserSelectAssignees = oaLeaveDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaLeaveRespVO.setAuditUserList(auditUserList);
@@ -563,16 +581,15 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         // 审批人
         String startUserSelectAssignees = oaLeaveDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaLeaveRespVO.setAuditUserList(auditUserList);
@@ -589,13 +606,12 @@ public class OaLeaveServiceImpl implements OaLeaveService {
         List<OaLeaveRespVO> oaLeaveRespVOList = oaLeaveRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaLeaveRespVOList)) {
             List<Long> employeeIdList = oaLeaveRespVOList.stream().map(OaLeaveRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaLeaveRespVO respVO : oaLeaveRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 

+ 117 - 103
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/out/OaOutServiceImpl.java

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -22,12 +23,12 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -76,20 +77,21 @@ public class OaOutServiceImpl implements OaOutService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaOut(OaOutSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(loginUserId);
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaOutDO oaOut = BeanUtils.toBean(stagingReqVO, OaOutDO.class);
         if (StringUtils.isBlank(oaOut.getOutId())) {
@@ -97,18 +99,18 @@ public class OaOutServiceImpl implements OaOutService {
             String uuid = IdUtil.fastSimpleUUID();
             oaOut.setOutId(uuid);
         }
-        if (employee != null) {
-            oaOut.setEmployeeId(loginUser.getId());
-            oaOut.setEmployeeName(loginUser.getNickname());
-            oaOut.setEmployeePhone(loginUser.getMobile());
-            oaOut.setDeptId(loginUser.getDeptId());
-            oaOut.setPosition("员工职位");
-            oaOut.setUserId(loginUser.getId());
-        }
+        oaOut.setEmployeeId(loginEmployee.getId());
+        oaOut.setEmployeeName(loginEmployee.getName());
+        oaOut.setEmployeePhone(loginEmployee.getPhone());
+        oaOut.setDeptId(loginEmployee.getDeptId());
+        oaOut.setPostId(loginEmployee.getPostId());
+        oaOut.setPosition(loginEmployee.getPosition());
+        oaOut.setUserId(loginUserId);
         oaOut.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaOut.setInfoSource("0");
-        oaOut.setApplyEmployeeId(loginUser.getId());
-        oaOut.setApplyEmployeeName(loginUser.getNickname());
+        oaOut.setApplyEmployeeId(loginEmployee.getId());
+        oaOut.setApplyEmployeeName(loginEmployee.getName());
+        oaOut.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaOut.setStartUserSelectAssignees(null);
         // 保存或更新表单信息
@@ -125,20 +127,16 @@ public class OaOutServiceImpl implements OaOutService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaOut(OaOutSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -149,15 +147,17 @@ public class OaOutServiceImpl implements OaOutService {
             String uuid = IdUtil.fastSimpleUUID();
             oaOut.setOutId(uuid);
         }
-        oaOut.setEmployeeId(employee.getId());
-        oaOut.setEmployeeName(employee.getNickname());
-        oaOut.setEmployeePhone(employee.getMobile());
-        oaOut.setDeptId(employee.getDeptId());
-        oaOut.setPosition("员工职位");
-        oaOut.setUserId(loginUser.getId());
+        oaOut.setEmployeeId(loginEmployee.getId());
+        oaOut.setEmployeeName(loginEmployee.getName());
+        oaOut.setEmployeePhone(loginEmployee.getPhone());
+        oaOut.setDeptId(loginEmployee.getDeptId());
+        oaOut.setPostId(loginEmployee.getPostId());
+        oaOut.setPosition(loginEmployee.getPosition());
+        oaOut.setUserId(loginUserId);
         oaOut.setInfoSource("0");
-        oaOut.setApplyEmployeeId(loginUser.getId());
-        oaOut.setApplyEmployeeName(loginUser.getNickname());
+        oaOut.setApplyEmployeeId(loginEmployee.getId());
+        oaOut.setApplyEmployeeName(loginEmployee.getName());
+        oaOut.setCreator(String.valueOf(loginEmployee.getId()));
         // 保存或更新表单信息
         if (oaOut.getId() == null) {
             oaOutMapper.insert(oaOut);
@@ -176,7 +176,7 @@ public class OaOutServiceImpl implements OaOutService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -193,14 +193,14 @@ public class OaOutServiceImpl implements OaOutService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -210,7 +210,7 @@ public class OaOutServiceImpl implements OaOutService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaOut.getOutId());
@@ -219,11 +219,15 @@ public class OaOutServiceImpl implements OaOutService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaOut(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -251,19 +255,19 @@ public class OaOutServiceImpl implements OaOutService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaOutDO oaOutDO = new OaOutDO();
         if (nextTask != null) {
             Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
             // 如果审批人重复,实际未结束,再次更新为审核中
             taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
             oaOutDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
                     .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaOut.getId());
 
@@ -274,7 +278,7 @@ public class OaOutServiceImpl implements OaOutService {
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaOut.getId());
 
-            // TODO 复制业务单据信息到业务模块单据表
+            // TODO DP 复制业务单据信息到业务模块单据表
 
         }
         oaOutMapper.updateById(oaOutDO);
@@ -285,11 +289,15 @@ public class OaOutServiceImpl implements OaOutService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaOut(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -298,16 +306,16 @@ public class OaOutServiceImpl implements OaOutService {
         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);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaOutDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaOutDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaOutDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaOutDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaOutDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaOutDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaOutDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -319,11 +327,15 @@ public class OaOutServiceImpl implements OaOutService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaOut(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -333,7 +345,7 @@ public class OaOutServiceImpl implements OaOutService {
                 .eq(OaOutDO::getProcInstId, currentTask.getProcessInstanceId());
         OaOutDO oaOutDO = oaOutMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaOutDO.getAuditStatus())
-                || !Objects.equals(String.valueOf(loginUserId), oaOutDO.getCreator())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaOutDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -346,16 +358,16 @@ public class OaOutServiceImpl implements OaOutService {
         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);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaOutDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaOutDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaOutDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaOutDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaOutDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaOutDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaOutDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -367,20 +379,16 @@ public class OaOutServiceImpl implements OaOutService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaOut(OaOutSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -389,14 +397,15 @@ public class OaOutServiceImpl implements OaOutService {
         oaOutNew.setOutId(oaOutOld.getOutId())
                 .setProcInstId(oaOutOld.getProcInstId());
 
-        oaOutNew.setEmployeeId(employee.getId());
-        oaOutNew.setEmployeeName(employee.getNickname());
-        oaOutNew.setEmployeePhone(employee.getMobile());
-        oaOutNew.setDeptId(employee.getDeptId());
-        oaOutNew.setPosition("员工职位");
-        oaOutNew.setUserId(loginUser.getId());
-        oaOutNew.setApplyEmployeeId(loginUser.getId());
-        oaOutNew.setApplyEmployeeName(loginUser.getNickname());
+        oaOutNew.setEmployeeId(loginEmployee.getId());
+        oaOutNew.setEmployeeName(loginEmployee.getName());
+        oaOutNew.setEmployeePhone(loginEmployee.getPhone());
+        oaOutNew.setDeptId(loginEmployee.getDeptId());
+        oaOutNew.setPostId(loginEmployee.getPostId());
+        oaOutNew.setPosition(loginEmployee.getPosition());
+        oaOutNew.setUserId(loginUserId);
+        oaOutNew.setApplyEmployeeId(loginEmployee.getId());
+        oaOutNew.setApplyEmployeeName(loginEmployee.getName());
 
         Task currentTask = taskService.createTaskQuery().processInstanceId(oaOutNew.getProcInstId()).singleResult();
         BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
@@ -415,14 +424,14 @@ public class OaOutServiceImpl implements OaOutService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaOutNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaOutMapper.updateById(oaOutNew);
 
@@ -433,14 +442,18 @@ public class OaOutServiceImpl implements OaOutService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaOut(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaOutDO oaOutDO = oaOutMapper.selectById(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaOutDO.getAuditStatus())
@@ -456,7 +469,7 @@ public class OaOutServiceImpl implements OaOutService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaOutDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaOutDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -480,7 +493,11 @@ public class OaOutServiceImpl implements OaOutService {
     public OaOutRespVO getOaOut(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaOutDO oaOutDO = validateOaOutExists(id);
         OaOutRespVO oaOutRespVO = BeanUtils.toBean(oaOutDO, OaOutRespVO.class);
@@ -495,7 +512,7 @@ public class OaOutServiceImpl implements OaOutService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaOutDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -521,16 +538,15 @@ public class OaOutServiceImpl implements OaOutService {
         // 审批人
         String startUserSelectAssignees = oaOutDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaOutRespVO.setAuditUserList(auditUserList);
@@ -563,16 +579,15 @@ public class OaOutServiceImpl implements OaOutService {
         // 审批人
         String startUserSelectAssignees = oaOutDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaOutRespVO.setAuditUserList(auditUserList);
@@ -589,13 +604,12 @@ public class OaOutServiceImpl implements OaOutService {
         List<OaOutRespVO> oaOutRespVOList = oaOutRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaOutRespVOList)) {
             List<Long> employeeIdList = oaOutRespVOList.stream().map(OaOutRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaOutRespVO respVO : oaOutRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 

+ 120 - 106
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/purchase/OaPurchaseServiceImpl.java

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -24,12 +25,12 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -81,20 +82,21 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaPurchase(OaPurchaseSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(loginUserId);
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaPurchaseDO oaPurchase = BeanUtils.toBean(stagingReqVO, OaPurchaseDO.class);
         if (StringUtils.isBlank(oaPurchase.getPurchaseUuid())) {
@@ -102,18 +104,18 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
             String uuid = IdUtil.fastSimpleUUID();
             oaPurchase.setPurchaseUuid(uuid);
         }
-        if (employee != null) {
-            oaPurchase.setEmployeeId(loginUser.getId());
-            oaPurchase.setEmployeeName(loginUser.getNickname());
-            oaPurchase.setEmployeePhone(loginUser.getMobile());
-            oaPurchase.setDeptId(loginUser.getDeptId());
-            oaPurchase.setPosition("员工职位");
-            oaPurchase.setUserId(loginUser.getId());
-        }
+        oaPurchase.setEmployeeId(loginEmployee.getId());
+        oaPurchase.setEmployeeName(loginEmployee.getName());
+        oaPurchase.setEmployeePhone(loginEmployee.getPhone());
+        oaPurchase.setDeptId(loginEmployee.getDeptId());
+        oaPurchase.setPostId(loginEmployee.getPostId());
+        oaPurchase.setPosition(loginEmployee.getPosition());
+        oaPurchase.setUserId(loginUserId);
         oaPurchase.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaPurchase.setInfoSource("0");
-        oaPurchase.setApplyEmployeeId(loginUser.getId());
-        oaPurchase.setApplyEmployeeName(loginUser.getNickname());
+        oaPurchase.setApplyEmployeeId(loginEmployee.getId());
+        oaPurchase.setApplyEmployeeName(loginEmployee.getName());
+        oaPurchase.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaPurchase.setStartUserSelectAssignees(null);
 
@@ -137,20 +139,16 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaPurchase(OaPurchaseSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -161,15 +159,17 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
             String uuid = IdUtil.fastSimpleUUID();
             oaPurchase.setPurchaseUuid(uuid);
         }
-        oaPurchase.setEmployeeId(employee.getId());
-        oaPurchase.setEmployeeName(employee.getNickname());
-        oaPurchase.setEmployeePhone(employee.getMobile());
-        oaPurchase.setDeptId(employee.getDeptId());
-        oaPurchase.setPosition("员工职位");
-        oaPurchase.setUserId(loginUser.getId());
+        oaPurchase.setEmployeeId(loginEmployee.getId());
+        oaPurchase.setEmployeeName(loginEmployee.getName());
+        oaPurchase.setEmployeePhone(loginEmployee.getPhone());
+        oaPurchase.setDeptId(loginEmployee.getDeptId());
+        oaPurchase.setPostId(loginEmployee.getPostId());
+        oaPurchase.setPosition(loginEmployee.getPosition());
+        oaPurchase.setUserId(loginUserId);
         oaPurchase.setInfoSource("0");
-        oaPurchase.setApplyEmployeeId(loginUser.getId());
-        oaPurchase.setApplyEmployeeName(loginUser.getNickname());
+        oaPurchase.setApplyEmployeeId(loginEmployee.getId());
+        oaPurchase.setApplyEmployeeName(loginEmployee.getName());
+        oaPurchase.setCreator(String.valueOf(loginEmployee.getId()));
 
         // 子表信息
         List<OaPurchaseObjDO> oaPurchaseObjs = commitReqVO.getOaPurchaseObjs();
@@ -208,7 +208,7 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -225,14 +225,14 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -242,7 +242,7 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaPurchase.getPurchaseUuid());
@@ -251,11 +251,15 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaPurchase(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -283,19 +287,19 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaPurchaseDO oaPurchaseDO = new OaPurchaseDO();
         if (nextTask != null) {
             Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
             // 如果审批人重复,实际未结束,再次更新为审核中
             taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
             oaPurchaseDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
                     .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaPurchase.getId());
 
@@ -317,11 +321,15 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaPurchase(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -330,16 +338,16 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         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);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaPurchaseDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaPurchaseDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaPurchaseDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaPurchaseDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaPurchaseDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaPurchaseDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaPurchaseDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -351,11 +359,15 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaPurchase(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -365,7 +377,7 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
                 .eq(OaPurchaseDO::getProcInstId, currentTask.getProcessInstanceId());
         OaPurchaseDO oaPurchaseDO = oaPurchaseMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaPurchaseDO.getAuditStatus())
-                || !Objects.equals(String.valueOf(loginUserId), oaPurchaseDO.getCreator())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaPurchaseDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -378,16 +390,16 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         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);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaPurchaseDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaPurchaseDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaPurchaseDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaPurchaseDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaPurchaseDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaPurchaseDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaPurchaseDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -399,20 +411,16 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaPurchase(OaPurchaseSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -421,14 +429,15 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         oaPurchaseNew.setPurchaseUuid(oaPurchaseOld.getPurchaseUuid())
                 .setProcInstId(oaPurchaseOld.getProcInstId());
 
-        oaPurchaseNew.setEmployeeId(employee.getId());
-        oaPurchaseNew.setEmployeeName(employee.getNickname());
-        oaPurchaseNew.setEmployeePhone(employee.getMobile());
-        oaPurchaseNew.setDeptId(employee.getDeptId());
-        oaPurchaseNew.setPosition("员工职位");
-        oaPurchaseNew.setUserId(loginUser.getId());
-        oaPurchaseNew.setApplyEmployeeId(loginUser.getId());
-        oaPurchaseNew.setApplyEmployeeName(loginUser.getNickname());
+        oaPurchaseNew.setEmployeeId(loginEmployee.getId());
+        oaPurchaseNew.setEmployeeName(loginEmployee.getName());
+        oaPurchaseNew.setEmployeePhone(loginEmployee.getPhone());
+        oaPurchaseNew.setDeptId(loginEmployee.getDeptId());
+        oaPurchaseNew.setPostId(loginEmployee.getPostId());
+        oaPurchaseNew.setPosition(loginEmployee.getPosition());
+        oaPurchaseNew.setUserId(loginUserId);
+        oaPurchaseNew.setApplyEmployeeId(loginEmployee.getId());
+        oaPurchaseNew.setApplyEmployeeName(loginEmployee.getName());
 
         // 子表信息
         List<OaPurchaseObjDO> oaPurchaseObjs = reCommitReqVO.getOaPurchaseObjs();
@@ -458,14 +467,14 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaPurchaseNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaPurchaseMapper.updateById(oaPurchaseNew);
 
@@ -481,14 +490,18 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaPurchase(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaPurchaseDO oaPurchaseDO = oaPurchaseMapper.selectById(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaPurchaseDO.getAuditStatus())
@@ -504,7 +517,7 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaPurchaseDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaPurchaseDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -517,7 +530,7 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void deleteOaPurchase(Long id) {
         // 校验存在
         validateOaPurchaseDelete(id);
@@ -531,7 +544,11 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     public OaPurchaseRespVO getOaPurchase(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaPurchaseDO oaPurchaseDO = validateOaPurchaseExists(id);
         OaPurchaseRespVO oaPurchaseRespVO = BeanUtils.toBean(oaPurchaseDO, OaPurchaseRespVO.class);
@@ -549,7 +566,7 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaPurchaseDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -575,16 +592,15 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         // 审批人
         String startUserSelectAssignees = oaPurchaseDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaPurchaseRespVO.setAuditUserList(auditUserList);
@@ -617,16 +633,15 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         // 审批人
         String startUserSelectAssignees = oaPurchaseDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaPurchaseRespVO.setAuditUserList(auditUserList);
@@ -643,13 +658,12 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
         List<OaPurchaseRespVO> oaPurchaseRespVOList = oaPurchaseRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaPurchaseRespVOList)) {
             List<Long> employeeIdList = oaPurchaseRespVOList.stream().map(OaPurchaseRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaPurchaseRespVO respVO : oaPurchaseRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 
@@ -704,7 +718,7 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     // private OaPurchaseObjMapper oaPurchaseObjMapper;
     //
     // @Override
-    // @Transactional(rollbackFor = Exception.class)
+    // @Transactional(rollbackFor = Exception.class)(rollbackFor = Exception.class)
     // public Long createOaPurchase(OaPurchaseSaveReqVO createReqVO) {
     //     // 插入
     //     OaPurchaseDO oaPurchase = BeanUtils.toBean(createReqVO, OaPurchaseDO.class);
@@ -717,7 +731,7 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     // }
     //
     // @Override
-    // @Transactional(rollbackFor = Exception.class)
+    // @Transactional(rollbackFor = Exception.class)(rollbackFor = Exception.class)
     // public void updateOaPurchase(OaPurchaseSaveReqVO updateReqVO) {
     //     // 校验存在
     //     validateOaPurchaseExists(updateReqVO.getId());
@@ -730,7 +744,7 @@ public class OaPurchaseServiceImpl implements OaPurchaseService {
     // }
     //
     // @Override
-    // @Transactional(rollbackFor = Exception.class)
+    // @Transactional(rollbackFor = Exception.class)(rollbackFor = Exception.class)
     // public void deleteOaPurchase(Long id) {
     //     // 校验存在
     //     validateOaPurchaseExists(id);

+ 120 - 106
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/receive/OaReceiveServiceImpl.java

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -24,12 +25,12 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -82,20 +83,21 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaReceive(OaReceiveSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(loginUserId);
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaReceiveDO oaReceive = BeanUtils.toBean(stagingReqVO, OaReceiveDO.class);
         if (StringUtils.isBlank(oaReceive.getReceiveUuid())) {
@@ -103,18 +105,18 @@ public class OaReceiveServiceImpl implements OaReceiveService {
             String uuid = IdUtil.fastSimpleUUID();
             oaReceive.setReceiveUuid(uuid);
         }
-        if (employee != null) {
-            oaReceive.setEmployeeId(loginUser.getId());
-            oaReceive.setEmployeeName(loginUser.getNickname());
-            oaReceive.setEmployeePhone(loginUser.getMobile());
-            oaReceive.setDeptId(loginUser.getDeptId());
-            oaReceive.setPosition("员工职位");
-            oaReceive.setUserId(loginUser.getId());
-        }
+        oaReceive.setEmployeeId(loginEmployee.getId());
+        oaReceive.setEmployeeName(loginEmployee.getName());
+        oaReceive.setEmployeePhone(loginEmployee.getPhone());
+        oaReceive.setDeptId(loginEmployee.getDeptId());
+        oaReceive.setPostId(loginEmployee.getPostId());
+        oaReceive.setPosition(loginEmployee.getPosition());
+        oaReceive.setUserId(loginUserId);
         oaReceive.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaReceive.setInfoSource("0");
-        oaReceive.setApplyEmployeeId(loginUser.getId());
-        oaReceive.setApplyEmployeeName(loginUser.getNickname());
+        oaReceive.setApplyEmployeeId(loginEmployee.getId());
+        oaReceive.setApplyEmployeeName(loginEmployee.getName());
+        oaReceive.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaReceive.setStartUserSelectAssignees(null);
 
@@ -138,20 +140,16 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaReceive(OaReceiveSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -162,15 +160,17 @@ public class OaReceiveServiceImpl implements OaReceiveService {
             String uuid = IdUtil.fastSimpleUUID();
             oaReceive.setReceiveUuid(uuid);
         }
-        oaReceive.setEmployeeId(employee.getId());
-        oaReceive.setEmployeeName(employee.getNickname());
-        oaReceive.setEmployeePhone(employee.getMobile());
-        oaReceive.setDeptId(employee.getDeptId());
-        oaReceive.setPosition("员工职位");
-        oaReceive.setUserId(loginUser.getId());
+        oaReceive.setEmployeeId(loginEmployee.getId());
+        oaReceive.setEmployeeName(loginEmployee.getName());
+        oaReceive.setEmployeePhone(loginEmployee.getPhone());
+        oaReceive.setDeptId(loginEmployee.getDeptId());
+        oaReceive.setPostId(loginEmployee.getPostId());
+        oaReceive.setPosition(loginEmployee.getPosition());
+        oaReceive.setUserId(loginUserId);
         oaReceive.setInfoSource("0");
-        oaReceive.setApplyEmployeeId(loginUser.getId());
-        oaReceive.setApplyEmployeeName(loginUser.getNickname());
+        oaReceive.setApplyEmployeeId(loginEmployee.getId());
+        oaReceive.setApplyEmployeeName(loginEmployee.getName());
+        oaReceive.setCreator(String.valueOf(loginEmployee.getId()));
 
         // 子表信息
         List<OaReceiveObjDO> oaReceiveObjs = commitReqVO.getOaReceiveObjs();
@@ -206,7 +206,7 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -223,14 +223,14 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -240,7 +240,7 @@ public class OaReceiveServiceImpl implements OaReceiveService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaReceive.getReceiveUuid());
@@ -249,11 +249,15 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaReceive(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -281,19 +285,19 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaReceiveDO oaReceiveDO = new OaReceiveDO();
         if (nextTask != null) {
             Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
             // 如果审批人重复,实际未结束,再次更新为审核中
             taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
             oaReceiveDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
                     .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaReceive.getId());
 
@@ -315,11 +319,15 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaReceive(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -328,16 +336,16 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         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);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaReceiveDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaReceiveDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaReceiveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaReceiveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaReceiveDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaReceiveDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaReceiveDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -349,11 +357,15 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaReceive(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -363,7 +375,7 @@ public class OaReceiveServiceImpl implements OaReceiveService {
                 .eq(OaReceiveDO::getProcInstId, currentTask.getProcessInstanceId());
         OaReceiveDO oaReceiveDO = oaReceiveMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaReceiveDO.getAuditStatus())
-                || !Objects.equals(String.valueOf(loginUserId), oaReceiveDO.getCreator())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaReceiveDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -376,16 +388,16 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         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);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaReceiveDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaReceiveDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaReceiveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaReceiveDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaReceiveDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaReceiveDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaReceiveDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -397,20 +409,16 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaReceive(OaReceiveSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -419,14 +427,15 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         oaReceiveNew.setReceiveUuid(oaReceiveOld.getReceiveUuid())
                 .setProcInstId(oaReceiveOld.getProcInstId());
 
-        oaReceiveNew.setEmployeeId(employee.getId());
-        oaReceiveNew.setEmployeeName(employee.getNickname());
-        oaReceiveNew.setEmployeePhone(employee.getMobile());
-        oaReceiveNew.setDeptId(employee.getDeptId());
-        oaReceiveNew.setPosition("员工职位");
-        oaReceiveNew.setUserId(loginUser.getId());
-        oaReceiveNew.setApplyEmployeeId(loginUser.getId());
-        oaReceiveNew.setApplyEmployeeName(loginUser.getNickname());
+        oaReceiveNew.setEmployeeId(loginEmployee.getId());
+        oaReceiveNew.setEmployeeName(loginEmployee.getName());
+        oaReceiveNew.setEmployeePhone(loginEmployee.getPhone());
+        oaReceiveNew.setDeptId(loginEmployee.getDeptId());
+        oaReceiveNew.setPostId(loginEmployee.getPostId());
+        oaReceiveNew.setPosition(loginEmployee.getPosition());
+        oaReceiveNew.setUserId(loginUserId);
+        oaReceiveNew.setApplyEmployeeId(loginEmployee.getId());
+        oaReceiveNew.setApplyEmployeeName(loginEmployee.getName());
 
         // 子表信息
         List<OaReceiveObjDO> oaReceiveObjs = reCommitReqVO.getOaReceiveObjs();
@@ -456,14 +465,14 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaReceiveNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaReceiveMapper.updateById(oaReceiveNew);
 
@@ -479,14 +488,18 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaReceive(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaReceiveDO oaReceiveDO = oaReceiveMapper.selectById(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaReceiveDO.getAuditStatus())
@@ -502,7 +515,7 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaReceiveDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaReceiveDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -515,7 +528,7 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void deleteOaReceive(Long id) {
         // 校验存在
         validateOaReceiveDelete(id);
@@ -529,7 +542,11 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     public OaReceiveRespVO getOaReceive(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaReceiveDO oaReceiveDO = validateOaReceiveExists(id);
         OaReceiveRespVO oaReceiveRespVO = BeanUtils.toBean(oaReceiveDO, OaReceiveRespVO.class);
@@ -547,7 +564,7 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaReceiveDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -573,16 +590,15 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         // 审批人
         String startUserSelectAssignees = oaReceiveDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaReceiveRespVO.setAuditUserList(auditUserList);
@@ -615,16 +631,15 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         // 审批人
         String startUserSelectAssignees = oaReceiveDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaReceiveRespVO.setAuditUserList(auditUserList);
@@ -641,13 +656,12 @@ public class OaReceiveServiceImpl implements OaReceiveService {
         List<OaReceiveRespVO> oaReceiveRespVOList = oaReceiveRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaReceiveRespVOList)) {
             List<Long> employeeIdList = oaReceiveRespVOList.stream().map(OaReceiveRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaReceiveRespVO respVO : oaReceiveRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 
@@ -702,7 +716,7 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     // private OaReceiveObjMapper oaReceiveObjMapper;
     //
     // @Override
-    // @Transactional(rollbackFor = Exception.class)
+    // @Transactional(rollbackFor = Exception.class)(rollbackFor = Exception.class)
     // public Long createOaReceive(OaReceiveSaveReqVO createReqVO) {
     //     // 插入
     //     OaReceiveDO oaReceive = BeanUtils.toBean(createReqVO, OaReceiveDO.class);
@@ -715,7 +729,7 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     // }
     //
     // @Override
-    // @Transactional(rollbackFor = Exception.class)
+    // @Transactional(rollbackFor = Exception.class)(rollbackFor = Exception.class)
     // public void updateOaReceive(OaReceiveSaveReqVO updateReqVO) {
     //     // 校验存在
     //     validateOaReceiveExists(updateReqVO.getId());
@@ -728,7 +742,7 @@ public class OaReceiveServiceImpl implements OaReceiveService {
     // }
     //
     // @Override
-    // @Transactional(rollbackFor = Exception.class)
+    // @Transactional(rollbackFor = Exception.class)(rollbackFor = Exception.class)
     // public void deleteOaReceive(Long id) {
     //     // 校验存在
     //     validateOaReceiveExists(id);

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

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -22,12 +23,12 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -38,7 +39,9 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -76,20 +79,23 @@ public class OaRenewServiceImpl implements OaRenewService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaRenew(OaRenewSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(stagingReqVO.getEmployeeId());
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // 续签人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(stagingReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaRenewDO oaRenew = BeanUtils.toBean(stagingReqVO, OaRenewDO.class);
         if (StringUtils.isBlank(oaRenew.getRenewId())) {
@@ -97,20 +103,27 @@ public class OaRenewServiceImpl implements OaRenewService {
             String uuid = IdUtil.fastSimpleUUID();
             oaRenew.setRenewId(uuid);
         }
-        if (employee != null) {
-            oaRenew.setEmployeeId(loginUser.getId());
-            oaRenew.setEmployeeName(loginUser.getNickname());
-            oaRenew.setEmployeePhone(loginUser.getMobile());
-            oaRenew.setDeptId(loginUser.getDeptId());
-            oaRenew.setPosition("员工职位");
-            oaRenew.setOldContractStartDate("2023-01-01");
-            oaRenew.setOldContractEndDate("2023-12-31");
-            oaRenew.setUserId(loginUser.getId());
-        }
+        oaRenew.setEmployeeId(employee.getId());
+        oaRenew.setEmployeeName(employee.getName());
+        oaRenew.setEmployeePhone(employee.getPhone());
+        oaRenew.setDeptId(employee.getDeptId());
+        oaRenew.setPostId(employee.getPostId());
+        oaRenew.setPosition(employee.getPosition());
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate contractStartDate = loginEmployee.getContractStartDate();
+        if (contractStartDate != null) {
+            oaRenew.setOldContractStartDate(formatter.format(contractStartDate));
+        }
+        LocalDate contractEndDate = loginEmployee.getContractEndDate();
+        if (contractEndDate != null) {
+            oaRenew.setOldContractEndDate(formatter.format(contractEndDate));
+        }
+        oaRenew.setUserId(loginUserId);
         oaRenew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaRenew.setInfoSource("0");
-        oaRenew.setApplyEmployeeId(loginUser.getId());
-        oaRenew.setApplyEmployeeName(loginUser.getNickname());
+        oaRenew.setApplyEmployeeId(loginEmployee.getId());
+        oaRenew.setApplyEmployeeName(loginEmployee.getName());
+        oaRenew.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaRenew.setStartUserSelectAssignees(null);
         // 保存或更新表单信息
@@ -127,20 +140,21 @@ public class OaRenewServiceImpl implements OaRenewService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaRenew(OaRenewSaveReqVO 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) {
+        if (loginUserId == null) {
             throw exception(ErrorCodeConstants.OA_LOGIN_USER_NOT_EXISTS);
         }
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(commitReqVO.getEmployeeId());
-        if (employee == null) {
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // 续签人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(commitReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -152,16 +166,25 @@ public class OaRenewServiceImpl implements OaRenewService {
             oaRenew.setRenewId(uuid);
         }
         oaRenew.setEmployeeId(employee.getId());
-        oaRenew.setEmployeeName(employee.getNickname());
-        oaRenew.setEmployeePhone(employee.getMobile());
+        oaRenew.setEmployeeName(employee.getName());
+        oaRenew.setEmployeePhone(employee.getPhone());
         oaRenew.setDeptId(employee.getDeptId());
-        oaRenew.setPosition("员工职位");
-        oaRenew.setOldContractStartDate("2023-01-01");
-        oaRenew.setOldContractEndDate("2023-12-31");
-        oaRenew.setUserId(loginUser.getId());
+        oaRenew.setPostId(employee.getPostId());
+        oaRenew.setPosition(employee.getPosition());
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate contractStartDate = loginEmployee.getContractStartDate();
+        if (contractStartDate != null) {
+            oaRenew.setOldContractStartDate(formatter.format(contractStartDate));
+        }
+        LocalDate contractEndDate = loginEmployee.getContractEndDate();
+        if (contractEndDate != null) {
+            oaRenew.setOldContractEndDate(formatter.format(contractEndDate));
+        }
+        oaRenew.setUserId(loginUserId);
         oaRenew.setInfoSource("0");
-        oaRenew.setApplyEmployeeId(loginUser.getId());
-        oaRenew.setApplyEmployeeName(loginUser.getNickname());
+        oaRenew.setApplyEmployeeId(loginEmployee.getId());
+        oaRenew.setApplyEmployeeName(loginEmployee.getName());
+        oaRenew.setCreator(String.valueOf(loginEmployee.getId()));
         // 保存或更新表单信息
         if (oaRenew.getId() == null) {
             oaRenewMapper.insert(oaRenew);
@@ -180,7 +203,7 @@ public class OaRenewServiceImpl implements OaRenewService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -197,14 +220,14 @@ public class OaRenewServiceImpl implements OaRenewService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -214,7 +237,7 @@ public class OaRenewServiceImpl implements OaRenewService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaRenew.getRenewId());
@@ -223,11 +246,15 @@ public class OaRenewServiceImpl implements OaRenewService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaRenew(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -255,19 +282,19 @@ public class OaRenewServiceImpl implements OaRenewService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaRenewDO oaRenewDO = new OaRenewDO();
         if (nextTask != null) {
             Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
             // 如果审批人重复,实际未结束,再次更新为审核中
             taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
             oaRenewDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
                     .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaRenew.getId());
 
@@ -289,11 +316,15 @@ public class OaRenewServiceImpl implements OaRenewService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaRenew(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -301,17 +332,17 @@ public class OaRenewServiceImpl implements OaRenewService {
         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);
+        taskService.setVariable(disagreeReqVO.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RETURNED);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaRenewDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaRenewDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaRenewDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaRenewDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaRenewDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaRenewDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaRenewDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -323,11 +354,15 @@ public class OaRenewServiceImpl implements OaRenewService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaRenew(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -337,7 +372,7 @@ public class OaRenewServiceImpl implements OaRenewService {
                 .eq(OaRenewDO::getProcInstId, currentTask.getProcessInstanceId());
         OaRenewDO oaRenewDO = oaRenewMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaRenewDO.getAuditStatus())
-                || !Objects.equals(String.valueOf(loginUserId), oaRenewDO.getCreator())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaRenewDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -349,17 +384,17 @@ public class OaRenewServiceImpl implements OaRenewService {
         }
         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);
+        taskService.setVariable(currentTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RECALLED);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaRenewDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaRenewDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaRenewDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaRenewDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaRenewDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaRenewDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaRenewDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -371,20 +406,18 @@ public class OaRenewServiceImpl implements OaRenewService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaRenew(OaRenewSaveReqVO 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) {
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // 续签人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(reCommitReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -394,15 +427,23 @@ public class OaRenewServiceImpl implements OaRenewService {
                 .setProcInstId(oaRenewOld.getProcInstId());
 
         oaRenewNew.setEmployeeId(employee.getId());
-        oaRenewNew.setEmployeeName(employee.getNickname());
-        oaRenewNew.setEmployeePhone(employee.getMobile());
+        oaRenewNew.setEmployeeName(employee.getName());
+        oaRenewNew.setEmployeePhone(employee.getPhone());
         oaRenewNew.setDeptId(employee.getDeptId());
-        oaRenewNew.setPosition("员工职位");
-        oaRenewNew.setOldContractStartDate("2023-01-01");
-        oaRenewNew.setOldContractEndDate("2023-12-31");
-        oaRenewNew.setUserId(loginUser.getId());
-        oaRenewNew.setApplyEmployeeId(loginUser.getId());
-        oaRenewNew.setApplyEmployeeName(loginUser.getNickname());
+        oaRenewNew.setPostId(employee.getPostId());
+        oaRenewNew.setPosition(employee.getPosition());
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate contractStartDate = loginEmployee.getContractStartDate();
+        if (contractStartDate != null) {
+            oaRenewNew.setOldContractStartDate(formatter.format(contractStartDate));
+        }
+        LocalDate contractEndDate = loginEmployee.getContractEndDate();
+        if (contractEndDate != null) {
+            oaRenewNew.setOldContractEndDate(formatter.format(contractEndDate));
+        }
+        oaRenewNew.setUserId(loginUserId);
+        oaRenewNew.setApplyEmployeeId(loginEmployee.getId());
+        oaRenewNew.setApplyEmployeeName(loginEmployee.getName());
 
         Task currentTask = taskService.createTaskQuery().processInstanceId(oaRenewNew.getProcInstId()).singleResult();
         BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
@@ -421,14 +462,14 @@ public class OaRenewServiceImpl implements OaRenewService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaRenewNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaRenewMapper.updateById(oaRenewNew);
 
@@ -439,14 +480,18 @@ public class OaRenewServiceImpl implements OaRenewService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaRenew(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaRenewDO oaRenewDO = validateOaRenewExists(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaRenewDO.getAuditStatus())
@@ -462,7 +507,7 @@ public class OaRenewServiceImpl implements OaRenewService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaRenewDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaRenewDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -486,7 +531,11 @@ public class OaRenewServiceImpl implements OaRenewService {
     public OaRenewRespVO getOaRenew(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaRenewDO oaRenewDO = validateOaRenewExists(id);
         OaRenewRespVO oaRenewRespVO = BeanUtils.toBean(oaRenewDO, OaRenewRespVO.class);
@@ -501,7 +550,7 @@ public class OaRenewServiceImpl implements OaRenewService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaRenewDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -527,16 +576,15 @@ public class OaRenewServiceImpl implements OaRenewService {
         // 审批人
         String startUserSelectAssignees = oaRenewDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaRenewRespVO.setAuditUserList(auditUserList);
@@ -569,16 +617,15 @@ public class OaRenewServiceImpl implements OaRenewService {
         // 审批人
         String startUserSelectAssignees = oaRenewDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaRenewRespVO.setAuditUserList(auditUserList);
@@ -595,13 +642,12 @@ public class OaRenewServiceImpl implements OaRenewService {
         List<OaRenewRespVO> oaRenewRespVOList = oaRenewRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaRenewRespVOList)) {
             List<Long> employeeIdList = oaRenewRespVOList.stream().map(OaRenewRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaRenewRespVO respVO : oaRenewRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 

+ 116 - 102
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/stamp/OaStampServiceImpl.java

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -22,12 +23,12 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -76,20 +77,21 @@ public class OaStampServiceImpl implements OaStampService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaStamp(OaStampSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(loginUserId);
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaStampDO oaStamp = BeanUtils.toBean(stagingReqVO, OaStampDO.class);
         if (StringUtils.isBlank(oaStamp.getStampUuid())) {
@@ -97,18 +99,18 @@ public class OaStampServiceImpl implements OaStampService {
             String uuid = IdUtil.fastSimpleUUID();
             oaStamp.setStampUuid(uuid);
         }
-        if (employee != null) {
-            oaStamp.setEmployeeId(loginUser.getId());
-            oaStamp.setEmployeeName(loginUser.getNickname());
-            oaStamp.setEmployeePhone(loginUser.getMobile());
-            oaStamp.setDeptId(loginUser.getDeptId());
-            oaStamp.setPosition("员工职位");
-            oaStamp.setUserId(loginUser.getId());
-        }
+        oaStamp.setEmployeeId(loginEmployee.getId());
+        oaStamp.setEmployeeName(loginEmployee.getName());
+        oaStamp.setEmployeePhone(loginEmployee.getPhone());
+        oaStamp.setDeptId(loginEmployee.getDeptId());
+        oaStamp.setPostId(loginEmployee.getPostId());
+        oaStamp.setPosition(loginEmployee.getPosition());
+        oaStamp.setUserId(loginUserId);
         oaStamp.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaStamp.setInfoSource("0");
-        oaStamp.setApplyEmployeeId(loginUser.getId());
-        oaStamp.setApplyEmployeeName(loginUser.getNickname());
+        oaStamp.setApplyEmployeeId(loginEmployee.getId());
+        oaStamp.setApplyEmployeeName(loginEmployee.getName());
+        oaStamp.setCreator(String.valueOf(loginEmployee.getId()));
         List<Long> stampSealId = stagingReqVO.getStampSealId();
         if (CollectionUtil.isNotEmpty(stampSealId)) {
             oaStamp.setStampSealId(stampSealId.stream().map(String::valueOf).collect(Collectors.joining(",")));
@@ -131,20 +133,16 @@ public class OaStampServiceImpl implements OaStampService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaStamp(OaStampSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -155,15 +153,17 @@ public class OaStampServiceImpl implements OaStampService {
             String uuid = IdUtil.fastSimpleUUID();
             oaStamp.setStampUuid(uuid);
         }
-        oaStamp.setEmployeeId(employee.getId());
-        oaStamp.setEmployeeName(employee.getNickname());
-        oaStamp.setEmployeePhone(employee.getMobile());
-        oaStamp.setDeptId(employee.getDeptId());
-        oaStamp.setPosition("员工职位");
-        oaStamp.setUserId(loginUser.getId());
+        oaStamp.setEmployeeId(loginEmployee.getId());
+        oaStamp.setEmployeeName(loginEmployee.getName());
+        oaStamp.setEmployeePhone(loginEmployee.getPhone());
+        oaStamp.setDeptId(loginEmployee.getDeptId());
+        oaStamp.setPostId(loginEmployee.getPostId());
+        oaStamp.setPosition(loginEmployee.getPosition());
+        oaStamp.setUserId(loginUserId);
         oaStamp.setInfoSource("0");
-        oaStamp.setApplyEmployeeId(loginUser.getId());
-        oaStamp.setApplyEmployeeName(loginUser.getNickname());
+        oaStamp.setApplyEmployeeId(loginEmployee.getId());
+        oaStamp.setApplyEmployeeName(loginEmployee.getName());
+        oaStamp.setCreator(String.valueOf(loginEmployee.getId()));
         List<Long> stampSealId = commitReqVO.getStampSealId();
         if (CollectionUtil.isNotEmpty(stampSealId)) {
             oaStamp.setStampSealId(stampSealId.stream().map(String::valueOf).collect(Collectors.joining(",")));
@@ -188,7 +188,7 @@ public class OaStampServiceImpl implements OaStampService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -205,14 +205,14 @@ public class OaStampServiceImpl implements OaStampService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -222,7 +222,7 @@ public class OaStampServiceImpl implements OaStampService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaStamp.getStampUuid());
@@ -231,11 +231,15 @@ public class OaStampServiceImpl implements OaStampService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaStamp(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -263,19 +267,19 @@ public class OaStampServiceImpl implements OaStampService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaStampDO oaStampDO = new OaStampDO();
         if (nextTask != null) {
             Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
             // 如果审批人重复,实际未结束,再次更新为审核中
             taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
             oaStampDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
                     .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaStamp.getId());
 
@@ -297,11 +301,15 @@ public class OaStampServiceImpl implements OaStampService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaStamp(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -310,16 +318,16 @@ public class OaStampServiceImpl implements OaStampService {
         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);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaStampDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaStampDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaStampDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaStampDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaStampDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaStampDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaStampDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -331,11 +339,15 @@ public class OaStampServiceImpl implements OaStampService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaStamp(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -345,7 +357,7 @@ public class OaStampServiceImpl implements OaStampService {
                 .eq(OaStampDO::getProcInstId, currentTask.getProcessInstanceId());
         OaStampDO oaStampDO = oaStampMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaStampDO.getAuditStatus())
-                || !Objects.equals(String.valueOf(loginUserId), oaStampDO.getCreator())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaStampDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -358,16 +370,16 @@ public class OaStampServiceImpl implements OaStampService {
         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);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaStampDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaStampDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaStampDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaStampDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaStampDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaStampDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaStampDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -379,20 +391,16 @@ public class OaStampServiceImpl implements OaStampService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaStamp(OaStampSaveReqVO 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(loginUserId);
-        if (employee == null) {
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -401,14 +409,15 @@ public class OaStampServiceImpl implements OaStampService {
         oaStampNew.setStampSealId(oaStampOld.getStampUuid())
                 .setProcInstId(oaStampOld.getProcInstId());
 
-        oaStampNew.setEmployeeId(employee.getId());
-        oaStampNew.setEmployeeName(employee.getNickname());
-        oaStampNew.setEmployeePhone(employee.getMobile());
-        oaStampNew.setDeptId(employee.getDeptId());
-        oaStampNew.setPosition("员工职位");
-        oaStampNew.setUserId(loginUser.getId());
-        oaStampNew.setApplyEmployeeId(loginUser.getId());
-        oaStampNew.setApplyEmployeeName(loginUser.getNickname());
+        oaStampNew.setEmployeeId(loginEmployee.getId());
+        oaStampNew.setEmployeeName(loginEmployee.getName());
+        oaStampNew.setEmployeePhone(loginEmployee.getPhone());
+        oaStampNew.setDeptId(loginEmployee.getDeptId());
+        oaStampNew.setPostId(loginEmployee.getPostId());
+        oaStampNew.setPosition(loginEmployee.getPosition());
+        oaStampNew.setUserId(loginUserId);
+        oaStampNew.setApplyEmployeeId(loginEmployee.getId());
+        oaStampNew.setApplyEmployeeName(loginEmployee.getName());
         List<Long> stampSealId = reCommitReqVO.getStampSealId();
         if (CollectionUtil.isNotEmpty(stampSealId)) {
             oaStampNew.setStampSealId(stampSealId.stream().map(String::valueOf).collect(Collectors.joining(",")));
@@ -433,14 +442,14 @@ public class OaStampServiceImpl implements OaStampService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaStampNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaStampMapper.updateById(oaStampNew);
 
@@ -451,14 +460,18 @@ public class OaStampServiceImpl implements OaStampService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaStamp(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaStampDO oaStampDO = oaStampMapper.selectById(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaStampDO.getAuditStatus())
@@ -474,7 +487,7 @@ public class OaStampServiceImpl implements OaStampService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaStampDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaStampDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -498,7 +511,11 @@ public class OaStampServiceImpl implements OaStampService {
     public OaStampRespVO getOaStamp(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaStampDO oaStampDO = validateOaStampExists(id);
         OaStampRespVO oaStampRespVO = BeanUtils.toBean(oaStampDO, OaStampRespVO.class);
@@ -523,7 +540,7 @@ public class OaStampServiceImpl implements OaStampService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaStampDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -549,16 +566,15 @@ public class OaStampServiceImpl implements OaStampService {
         // 审批人
         String startUserSelectAssignees = oaStampDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaStampRespVO.setAuditUserList(auditUserList);
@@ -601,16 +617,15 @@ public class OaStampServiceImpl implements OaStampService {
         // 审批人
         String startUserSelectAssignees = oaStampDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaStampRespVO.setAuditUserList(auditUserList);
@@ -627,13 +642,12 @@ public class OaStampServiceImpl implements OaStampService {
         List<OaStampRespVO> oaStampRespVOList = oaStampRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaStampRespVOList)) {
             List<Long> employeeIdList = oaStampRespVOList.stream().map(OaStampRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaStampRespVO respVO : oaStampRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 

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

@@ -6,6 +6,7 @@ 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.collection.CollectionUtils;
 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;
@@ -22,12 +23,12 @@ 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.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 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;
@@ -38,7 +39,9 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -77,20 +80,23 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
     private FileApi fileApi;
 
     @Resource
-    private AdminUserApi adminUserApi;
+    private EmployeeApi employeeApi;
 
     @Resource
     private DeptApi deptApi;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaTurnover(OaTurnoverSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // 人信息
-        AdminUserRespDTO employee = adminUserApi.getUser(stagingReqVO.getEmployeeId());
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // 离职人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(stagingReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaTurnoverDO oaTurnover = BeanUtils.toBean(stagingReqVO, OaTurnoverDO.class);
         if (StringUtils.isBlank(oaTurnover.getTurnoverId())) {
@@ -98,19 +104,23 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
             String uuid = IdUtil.fastSimpleUUID();
             oaTurnover.setTurnoverId(uuid);
         }
-        if (employee != null) {
-            oaTurnover.setEmployeeId(loginUser.getId());
-            oaTurnover.setEmployeeName(loginUser.getNickname());
-            oaTurnover.setEmployeePhone(loginUser.getMobile());
-            oaTurnover.setDeptId(loginUser.getDeptId());
-            oaTurnover.setPosition("员工职位");
-            oaTurnover.setEntryDate("2023-01-01");
-            oaTurnover.setUserId(loginUser.getId());
-        }
+        oaTurnover.setEmployeeId(employee.getId());
+        oaTurnover.setEmployeeName(employee.getName());
+        oaTurnover.setEmployeePhone(employee.getPhone());
+        oaTurnover.setDeptId(employee.getDeptId());
+        oaTurnover.setPostId(employee.getPostId());
+        oaTurnover.setPosition(employee.getPosition());
+        LocalDate entryDate = employee.getEntryDate();
+        if (entryDate != null) {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            oaTurnover.setEntryDate(entryDate.format(formatter));
+        }
+        oaTurnover.setUserId(loginUserId);
         oaTurnover.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaTurnover.setInfoSource("0");
-        oaTurnover.setApplyEmployeeId(loginUser.getId());
-        oaTurnover.setApplyEmployeeName(loginUser.getNickname());
+        oaTurnover.setApplyEmployeeId(loginEmployee.getId());
+        oaTurnover.setApplyEmployeeName(loginEmployee.getName());
+        oaTurnover.setCreator(String.valueOf(loginEmployee.getId()));
         // 暂存不保存审批人信息
         oaTurnover.setStartUserSelectAssignees(null);
         // 保存或更新表单信息
@@ -127,20 +137,18 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaTurnover(OaTurnoverSaveReqVO 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) {
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // 离职人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(commitReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -152,15 +160,22 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
             oaTurnover.setTurnoverId(uuid);
         }
         oaTurnover.setEmployeeId(employee.getId());
-        oaTurnover.setEmployeeName(employee.getNickname());
-        oaTurnover.setEmployeePhone(employee.getMobile());
+        oaTurnover.setEmployeeName(employee.getName());
+        oaTurnover.setEmployeePhone(employee.getPhone());
         oaTurnover.setDeptId(employee.getDeptId());
-        oaTurnover.setPosition("员工职位");
-        oaTurnover.setEntryDate("2023-01-01");
-        oaTurnover.setUserId(loginUser.getId());
+        oaTurnover.setPostId(employee.getPostId());
+        oaTurnover.setPosition(employee.getPosition());
+        LocalDate entryDate = employee.getEntryDate();
+        if (entryDate != null) {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            oaTurnover.setEntryDate(entryDate.format(formatter));
+        }
+
+        oaTurnover.setUserId(loginUserId);
         oaTurnover.setInfoSource("0");
-        oaTurnover.setApplyEmployeeId(loginUser.getId());
-        oaTurnover.setApplyEmployeeName(loginUser.getNickname());
+        oaTurnover.setApplyEmployeeId(loginEmployee.getId());
+        oaTurnover.setApplyEmployeeName(loginEmployee.getName());
+        oaTurnover.setCreator(String.valueOf(loginEmployee.getId()));
         // 保存或更新表单信息
         if (oaTurnover.getId() == null) {
             oaTurnoverMapper.insert(oaTurnover);
@@ -179,7 +194,7 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -196,14 +211,14 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         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);
+        bpmTaskService.approveTask(loginEmployee.getId(), 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);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
 
         // 将工作流的流程实例ID、单据状态、最后一次审批时间、当前审批人更新到单据信息中
@@ -213,7 +228,7 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
                 .setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setFinalAuditDate(LocalDateTime.now())
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         saveFileList(commitReqVO.getFileIdList(), oaTurnover.getTurnoverId());
@@ -222,11 +237,15 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaTurnover(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -254,19 +273,19 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaTurnoverDO oaTurnoverDO = new OaTurnoverDO();
         if (nextTask != null) {
             Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-            AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+            EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
             // 如果审批人重复,实际未结束,再次更新为审核中
             taskService.setVariable(nextTask.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_AUDITING);
             oaTurnoverDO.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_AUDITING)
                     .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                    .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                    .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaTurnover.getId());
 
@@ -277,7 +296,7 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaTurnover.getId());
 
-            // TODO 复制业务单据信息到业务模块单据表
+            // TODO DP复制业务单据信息到业务模块单据表
 
         }
         oaTurnoverMapper.updateById(oaTurnoverDO);
@@ -288,11 +307,15 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaTurnover(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -301,16 +324,16 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         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);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaTurnoverDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaTurnoverDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaTurnoverDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaTurnoverDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaTurnoverDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaTurnoverDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RETURNED)
                 .eq(OaTurnoverDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -322,11 +345,15 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long revocationOaTurnover(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -336,7 +363,7 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
                 .eq(OaTurnoverDO::getProcInstId, currentTask.getProcessInstanceId());
         OaTurnoverDO oaTurnoverDO = oaTurnoverMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaTurnoverDO.getAuditStatus())
-                || !Objects.equals(String.valueOf(loginUserId), oaTurnoverDO.getCreator())) {
+                || !Objects.equals(String.valueOf(loginEmployee.getId()), oaTurnoverDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -349,16 +376,16 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         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);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
 
         // 更新单据状态,当前处理人,最后处理时间
         LambdaUpdateWrapper<OaTurnoverDO> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(OaTurnoverDO::getCurrentAuditEmployeeId, currentAuditEmployeeId)
-                .set(OaTurnoverDO::getCurrentAuditEmployeeName, currentAuditEmployee.getNickname())
+                .set(OaTurnoverDO::getCurrentAuditEmployeeName, currentAuditEmployee.getName())
                 .set(OaTurnoverDO::getFinalAuditDate, LocalDateTime.now())
                 .set(OaTurnoverDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_RECALLED)
                 .eq(OaTurnoverDO::getProcInstId, currentTask.getProcessInstanceId());
@@ -370,20 +397,18 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long reCommitOaTurnover(OaTurnoverSaveReqVO 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) {
+        // 登录员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        // 离职人信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeById(reCommitReqVO.getEmployeeId());
+        if (loginEmployee == null || employee == null) {
             throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
         }
 
@@ -393,14 +418,20 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
                 .setProcInstId(oaTurnoverOld.getProcInstId());
 
         oaTurnoverNew.setEmployeeId(employee.getId());
-        oaTurnoverNew.setEmployeeName(employee.getNickname());
-        oaTurnoverNew.setEmployeePhone(employee.getMobile());
+        oaTurnoverNew.setEmployeeName(employee.getName());
+        oaTurnoverNew.setEmployeePhone(employee.getPhone());
         oaTurnoverNew.setDeptId(employee.getDeptId());
-        oaTurnoverNew.setPosition("员工职位");
-        oaTurnoverNew.setEntryDate("2023-01-01");
-        oaTurnoverNew.setUserId(loginUser.getId());
-        oaTurnoverNew.setApplyEmployeeId(loginUser.getId());
-        oaTurnoverNew.setApplyEmployeeName(loginUser.getNickname());
+        oaTurnoverNew.setPostId(employee.getPostId());
+        oaTurnoverNew.setPosition(employee.getPosition());
+        LocalDate entryDate = employee.getEntryDate();
+        if (entryDate != null) {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            oaTurnoverNew.setEntryDate(entryDate.format(formatter));
+        }
+
+        oaTurnoverNew.setUserId(loginUserId);
+        oaTurnoverNew.setApplyEmployeeId(loginEmployee.getId());
+        oaTurnoverNew.setApplyEmployeeName(loginEmployee.getName());
 
         Task currentTask = taskService.createTaskQuery().processInstanceId(oaTurnoverNew.getProcInstId()).singleResult();
         BpmTaskApproveReqVO approveReqVO = new BpmTaskApproveReqVO();
@@ -419,14 +450,14 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         Long currentAuditEmployeeId = Long.valueOf(nextTask.getAssignee());
-        AdminUserRespDTO currentAuditEmployee = adminUserApi.getUser(currentAuditEmployeeId);
+        EmployeeRespDTO currentAuditEmployee = employeeApi.getEmployeeById(currentAuditEmployeeId);
         oaTurnoverNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
                 .setCurrentAuditEmployeeId(currentAuditEmployeeId)
-                .setCurrentAuditEmployeeName(currentAuditEmployee.getNickname())
+                .setCurrentAuditEmployeeName(currentAuditEmployee.getName())
                 .setFinalAuditDate(LocalDateTime.now());
         oaTurnoverMapper.updateById(oaTurnoverNew);
 
@@ -437,14 +468,18 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long closeOaTurnover(Long id) {
         if (id == null) {
             throw exception(ErrorCodeConstants.SERVICE_ID_NOT_EXISTS);
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaTurnoverDO oaTurnoverDO = validateOaTurnoverExists(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaTurnoverDO.getAuditStatus())
@@ -460,7 +495,7 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaTurnoverDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaTurnoverDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -484,7 +519,11 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
     public OaTurnoverRespVO getOaTurnover(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(ErrorCodeConstants.OA_EMPLOYEE_NOT_EXISTS);
+        }
 
         OaTurnoverDO oaTurnoverDO = oaTurnoverMapper.selectById(id);
         OaTurnoverRespVO oaTurnoverRespVO = BeanUtils.toBean(oaTurnoverDO, OaTurnoverRespVO.class);
@@ -499,7 +538,7 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaTurnoverDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -525,16 +564,15 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         // 审批人
         String startUserSelectAssignees = oaTurnoverDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaTurnoverRespVO.setAuditUserList(auditUserList);
@@ -567,16 +605,15 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         // 审批人
         String startUserSelectAssignees = oaTurnoverDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = 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;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaTurnoverRespVO.setAuditUserList(auditUserList);
@@ -593,13 +630,12 @@ public class OaTurnoverServiceImpl implements OaTurnoverService {
         List<OaTurnoverRespVO> oaTurnoverRespVOList = oaTurnoverRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaTurnoverRespVOList)) {
             List<Long> employeeIdList = oaTurnoverRespVOList.stream().map(OaTurnoverRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaTurnoverRespVO respVO : oaTurnoverRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 

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

@@ -8,7 +8,6 @@ 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.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;
@@ -30,8 +29,6 @@ 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;
@@ -79,9 +76,6 @@ public class OaUniversalServiceImpl implements OaUniversalService {
     @Resource
     private FileApi fileApi;
 
-    @Resource
-    private AdminUserApi adminUserApi;
-
     @Resource
     private DeptApi deptApi;
 
@@ -93,8 +87,6 @@ public class OaUniversalServiceImpl implements OaUniversalService {
     public Long stagingOaUniversal(OaUniversalSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
         // 根据登录人查询出对应的员工信息
         EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
@@ -112,7 +104,6 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         oaUniversal.setPosition(loginEmployee.getPosition());
         oaUniversal.setCreator(String.valueOf(loginEmployee.getId()));
         oaUniversal.setUserId(loginUserId);
-        oaUniversal.setUserPhone(loginUser.getMobile());
         oaUniversal.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaUniversal.setInfoSource("0");
         // 暂存不保存审批人信息
@@ -138,8 +129,6 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
-        Objects.requireNonNull(loginUser, "登录用户不能为空");
         // 根据登录人查询出对应的员工信息
         EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
@@ -156,8 +145,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         oaUniversal.setPostId(loginEmployee.getPostId());
         oaUniversal.setPosition(loginEmployee.getPosition());
         oaUniversal.setCreator(String.valueOf(loginEmployee.getId()));
-        oaUniversal.setUserId(loginUser.getId());
-        oaUniversal.setUserPhone(loginUser.getMobile());
+        oaUniversal.setUserId(loginUserId);
         oaUniversal.setInfoSource("0");
         // 保存或更新表单信息
         if (oaUniversal.getId() == null) {
@@ -560,13 +548,12 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         List<OaUniversalRespVO> oaUniversalRespVOList = oaUniversalRespVOPageResult.getList();
         if (CollectionUtil.isNotEmpty(oaUniversalRespVOList)) {
             List<Long> employeeIdList = oaUniversalRespVOList.stream().map(OaUniversalRespVO::getCurrentAuditEmployeeId).collect(Collectors.toList());
-            List<AdminUserRespDTO> employeeList = adminUserApi.getUserList(employeeIdList);
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
             for (OaUniversalRespVO respVO : oaUniversalRespVOList) {
-                for (AdminUserRespDTO employee : employeeList) {
-                    if (employee.getId() != null && employee.getId().equals(respVO.getCurrentAuditEmployeeId())) {
-                        respVO.setCurrentAuditEmployeeName(employee.getNickname());
-                        break;
-                    }
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(respVO.getCurrentAuditEmployeeId());
+                if (employeeRespDTO != null) {
+                    respVO.setCurrentAuditEmployeeName(employeeRespDTO.getName());
                 }
             }
 

+ 10 - 0
yudao-module-personnel/yudao-module-employee-api/src/main/java/cn/iocoder/yudao/module/employee/api/dto/EmployeeRespDTO.java

@@ -81,4 +81,14 @@ public class EmployeeRespDTO {
      */
     private Integer remainingAnnualLeave;
 
+    /**
+     * 最新合同开始日期
+     */
+    private LocalDate contractStartDate;
+
+    /**
+     * 最新合同结束日期
+     */
+    private LocalDate contractEndDate;
+
 }

+ 16 - 1
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/api/info/EmployeeApiImpl.java

@@ -12,6 +12,8 @@ import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoQue
 import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoSaveReqVO;
 import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
 import cn.iocoder.yudao.module.employee.service.info.EmployeeInfoService;
+import cn.iocoder.yudao.module.relations.api.contract.RelationsContractApi;
+import cn.iocoder.yudao.module.relations.api.contract.dto.RelationsContractDTO;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -29,6 +31,9 @@ public class EmployeeApiImpl implements EmployeeApi {
     @Resource
     private EmployeeInfoService infoService;
 
+    @Resource
+    private RelationsContractApi relationsContractApi;
+
     @Override
     public EmployeeRespDTO getEmployeeById(Long id) {
         EmployeeInfoDO info = infoService.getInfo(id);
@@ -44,7 +49,17 @@ public class EmployeeApiImpl implements EmployeeApi {
     @Override
     public EmployeeRespDTO getEmployeeByUserId(Long userId) {
         EmployeeInfoDO employeeInfoDO = infoService.getEmployeeByUserId(userId);
-        return BeanUtils.toBean(employeeInfoDO, EmployeeRespDTO.class);
+        EmployeeRespDTO employeeRespDTO = BeanUtils.toBean(employeeInfoDO, EmployeeRespDTO.class);
+
+        // 根据员工ID查询员工当前的合同信息
+        RelationsContractDTO lastContract = relationsContractApi.getLastContract(employeeRespDTO.getId());
+        // 如果员工的合同信息存在,则更新员工信息中的合同起始和结束日期
+        if (lastContract != null) {
+            employeeRespDTO.setContractStartDate(lastContract.getContractStartDate());
+            employeeRespDTO.setContractEndDate(lastContract.getContractEndDate());
+        }
+
+        return employeeRespDTO;
     }
 
     @Override