Jelajahi Sumber

工作流代码提交

fuyuchuan 6 bulan lalu
induk
melakukan
3df80548bf
44 mengubah file dengan 7044 tambahan dan 81 penghapusan
  1. 114 58
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkContentServiceImpl.java
  2. 0 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/MybatisGeneratorUtils.java
  3. 2 23
      service-oa/service-oa-biz/src/main/java/com/usky/oa/ServiceOaApplication.java
  4. 16 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/constant/OaApprovalConstant.java
  5. 86 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalAccountController.java
  6. 177 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalCoreController.java
  7. 48 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalDocumentController.java
  8. 146 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalFlowController.java
  9. 21 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalNodeController.java
  10. 21 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalRecordController.java
  11. 86 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalAccount.java
  12. 761 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalAccountExample.java
  13. 116 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalDocument.java
  14. 1151 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalDocumentExample.java
  15. 86 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalFlow.java
  16. 851 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalFlowExample.java
  17. 101 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalNode.java
  18. 871 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalNodeExample.java
  19. 106 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalRecord.java
  20. 1011 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalRecordExample.java
  21. 18 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalAccountMapper.java
  22. 18 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalDocumentMapper.java
  23. 18 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalFlowMapper.java
  24. 18 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalNodeMapper.java
  25. 16 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalRecordMapper.java
  26. 43 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalAccountService.java
  27. 53 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalCoreService.java
  28. 19 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalDocumentService.java
  29. 29 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalFlowService.java
  30. 16 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalNodeService.java
  31. 16 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalRecordService.java
  32. 143 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalAccountServiceImpl.java
  33. 355 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalCoreServiceImpl.java
  34. 64 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalDocumentServiceImpl.java
  35. 222 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalFlowServiceImpl.java
  36. 20 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalNodeServiceImpl.java
  37. 20 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalRecordServiceImpl.java
  38. 32 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/vo/OaApprovalFlowRequestVo.java
  39. 35 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/vo/OaApprovalNodeVo.java
  40. 21 0
      service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalAccountMapper.xml
  41. 27 0
      service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalDocumentMapper.xml
  42. 21 0
      service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalFlowMapper.xml
  43. 24 0
      service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalNodeMapper.xml
  44. 25 0
      service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalRecordMapper.xml

+ 114 - 58
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkContentServiceImpl.java

@@ -708,11 +708,12 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             return pmProjectMapper.selectList(projectsQuery);
         } else {
             projectsQuery.and(qw -> qw
-                    .apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql())
+                    .or().apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql())
                     .or().eq(PmProject::getProjectHead, userId)
                     .or().eq(PmProject::getCreateBy, SecurityUtils.getUsername())
                     .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
             );
+            // projectsQuery.apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql());
         }
         projectsQuery.eq(PmProject::getDelFlag, 0);
         return pmProjectMapper.selectList(projectsQuery);
@@ -725,13 +726,15 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
      * @param: [userId]
      * @return: java.util.List<com.usky.iot.domain.SysUser>
      **/
-    private List<SysUser> userNameList(List<Long> userId) {
+    private List<SysUser> userNameList(List<Long> userId, Integer workerOrProject) {
         LambdaQueryWrapper<SysUser> userNameQuery = Wrappers.lambdaQuery();
         userNameQuery.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName, SysUser::getPhonenumber, SysUser::getAvatar,
                 SysUser::getSex, SysUser::getDeptId, SysUser::getAddress);
         if (!userId.isEmpty()) {
             userNameQuery.eq(SysUser::getDelFlag, 0).eq(SysUser::getStatus, 0).in(SysUser::getUserId, userId);
             return sysUserMapper.selectList(userNameQuery);
+        } else if (workerOrProject == 2) {
+            userNameQuery.apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql());
         } else {
             userNameQuery.eq(SysUser::getUserId, SecurityUtils.getUserId());
         }
@@ -752,7 +755,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         LambdaQueryWrapper<PmWorkContent> workTimeQuery = Wrappers.lambdaQuery();
         workTimeQuery.select(PmWorkContent::getSubmitterId, PmWorkContent::getReportId, PmWorkContent::getProjectId, PmWorkContent::getProjectName,
                         PmWorkContent::getWorkTime, PmWorkContent::getDeptId, PmWorkContent::getTenantId)
-                .eq(PmWorkContent::getTenantId, tenantId).eq(PmWorkContent::getDeptId, deptId);
+                .eq(PmWorkContent::getTenantId, tenantId);
         if (!users.isEmpty()) {
             workTimeQuery.in(PmWorkContent::getSubmitterId, users);
         }
@@ -828,7 +831,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             throw new BusinessException("请设置查询时间范围!");
         }
 
-        List<SysUser> users = userNameList(userId);
+        List<SysUser> users = userNameList(userId, workerOrProject);
         List<Long> userIds = new ArrayList<>();
         List<String> nickName = new ArrayList<>();
         for (SysUser user : users) {
@@ -873,6 +876,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         }
         List<WorkHoursStatisticsVO> userAndProjectD = userAndProject;
 
+        //判断是否为项目维度
         if (workerOrProject != 1) {
             returnList.add(nickName);
             // 重组返回数据结构
@@ -886,14 +890,13 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                         workTime.add(BigDecimal.ZERO);
                     }
                 } else {
-
-                    boolean foundWorkTime = false;
-                    for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProject) {
-                        String userNickName = workHoursStatisticsVO.getNickName();
-                        String projectName = workHoursStatisticsVO.getProjectName();
-                        BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
-                        for (String currentNickName : nickName) {
-                            if (Objects.equals(projectName, name) && Objects.equals(userNickName, currentNickName)) {
+                    for (String currentNickName : nickName) {
+                        boolean foundWorkTime = false;
+                        for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProject) {
+                            String userNickName = workHoursStatisticsVO.getNickName();
+                            String projectName = workHoursStatisticsVO.getProjectName();
+                            BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
+                            if (projectName == name && userNickName == currentNickName) {
                                 workTime.add(userProjectWorkTime);
                                 if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
                                     hasNonZeroWorkTime = true;
@@ -902,10 +905,9 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                                 break;
                             }
                         }
-
-                    }
-                    if (!foundWorkTime) {
-                        workTime.add(BigDecimal.ZERO);
+                        if (!foundWorkTime) {
+                            workTime.add(BigDecimal.ZERO);
+                        }
                     }
                 }
                 // 过滤0工时
@@ -917,45 +919,80 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             returnList.add(projectWorkTime);
 
 
+            // 先过滤掉总工时为0的项目
+            Set<Integer> nonZeroProjectIndices = new HashSet<>();
+            for (int i = 0; i < pmProjectName.size(); i++) {
+                BigDecimal totalWorkTime = BigDecimal.ZERO;
+                for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProjectD) {
+                    if (workHoursStatisticsVO.getProjectName().equals(pmProjectName.get(i))) {
+                        totalWorkTime = totalWorkTime.add(workHoursStatisticsVO.getWorkTime());
+                    }
+                }
+                if (totalWorkTime.compareTo(BigDecimal.ZERO) != 0) {
+                    nonZeroProjectIndices.add(i);
+                }
+            }
+
             // 重组返回数据结构
             for (String uName : nickName) {
-                String name = uName;
+                String name1 = uName;
                 UserWorkTimeVO userWorkTimeVO2 = new UserWorkTimeVO();
-                userWorkTimeVO2.setProjectOrPerson(name);
-                List<BigDecimal> workTime = new ArrayList<>();
-                boolean hasNonZeroWorkTime = false;
-                if (userAndProjectD.isEmpty()) {
-                    for (String currentNickName : pmProjectName) {
-                        workTime.add(BigDecimal.ZERO);
-                    }
-                } else {
-                    for (String currentNickName : pmProjectName) {
-                        boolean foundWorkTime = false;
-                        for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProjectD) {
-                            String userNickName = workHoursStatisticsVO.getNickName();
-                            String projectName = workHoursStatisticsVO.getProjectName();
-                            BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
-                            if (Objects.equals(userNickName, name) && Objects.equals(projectName, currentNickName)) {
-                                workTime.add(userProjectWorkTime);
-                                if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
-                                    hasNonZeroWorkTime = true;
-                                }
-                                foundWorkTime = true;
-                                break;
-                            }
-                        }
-                        if (!foundWorkTime) {
-                            workTime.add(BigDecimal.ZERO);
+                userWorkTimeVO2.setProjectOrPerson(name1);
+                List<BigDecimal> workTime1 = new ArrayList<>();
+
+                for (int i = 0; i < pmProjectName.size(); i++) {
+                    BigDecimal userProjectWorkTime = BigDecimal.ZERO;
+                    boolean foundWorkTime = false;
+                    for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProjectD) {
+                        String userNickName = workHoursStatisticsVO.getNickName();
+                        String projectName = workHoursStatisticsVO.getProjectName();
+                        if (userNickName.equals(name1) && projectName.equals(pmProjectName.get(i))) {
+                            userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
+                            foundWorkTime = true;
+                            break;
                         }
                     }
+                    if (foundWorkTime && nonZeroProjectIndices.contains(i)) {
+                        workTime1.add(userProjectWorkTime);
+                    } else {
+                        workTime1.add(BigDecimal.ZERO);
+                    }
                 }
+
                 // 过滤0工时
-                if (filter != 2 || hasNonZeroWorkTime) {
-                    userWorkTimeVO2.setWorkTime(workTime);
+                boolean hasNonZeroWorkTime1 = false;
+                for (BigDecimal time : workTime1) {
+                    if (time.compareTo(BigDecimal.ZERO) != 0) {
+                        hasNonZeroWorkTime1 = true;
+                        break;
+                    }
+                }
+
+                if (filter != 2 || hasNonZeroWorkTime1) {
+                    userWorkTimeVO2.setWorkTime(workTime1);
                     userWorkTimeVO.add(userWorkTimeVO2);
                 }
             }
 
+            if (filter == 2){
+                for (int i = pmProjectName.size() - 1; i >= 0; i--) {
+                    if (!nonZeroProjectIndices.contains(i)) {
+                        pmProjectName.remove(i);
+                    }
+                }
+                for (int i = userWorkTimeVO.size() - 1; i >= 0; i--) {
+                    List<BigDecimal> workTime = userWorkTimeVO.get(i).getWorkTime();
+                    for (int j = workTime.size() - 1; j >= 0; j--) {
+                        if (!nonZeroProjectIndices.contains(j)) {
+                            workTime.remove(j);
+                        }
+                    }
+                    if (workTime.isEmpty()) {
+                        userWorkTimeVO.remove(i);
+                    }
+                }
+            }
+
             returnList.add(pmProjectName);
             returnList.add(userWorkTimeVO);
 
@@ -1001,12 +1038,16 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             }
             returnList.add(userWorkTimeVO);
 
-            // 重组返回数据结构
+
+            List<String> filteredNickName = new ArrayList<>();
+            List<ProjectWorkTimeVO> filteredProjectWorkTime = new ArrayList<>();
+
             for (String name : pmProjectName) {
                 ProjectWorkTimeVO projectWorkTimeVO = new ProjectWorkTimeVO();
                 projectWorkTimeVO.setProjectOrPerson(name);
                 List<BigDecimal> workTime = new ArrayList<>();
                 boolean hasNonZeroWorkTime = false;
+
                 if (userAndProject.isEmpty()) {
                     for (String currentNickName : nickName) {
                         workTime.add(BigDecimal.ZERO);
@@ -1018,7 +1059,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                             String userNickName = workHoursStatisticsVO.getNickName();
                             String projectName = workHoursStatisticsVO.getProjectName();
                             BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
-                            if (projectName == name && userNickName == currentNickName) {
+                            if (projectName.equals(name) && userNickName.equals(currentNickName)) {
                                 workTime.add(userProjectWorkTime);
                                 if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
                                     hasNonZeroWorkTime = true;
@@ -1032,29 +1073,44 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                         }
                     }
                 }
+
                 // 过滤0工时
                 if (filter != 2 || hasNonZeroWorkTime) {
                     projectWorkTimeVO.setWorkTime(workTime);
-                    projectWorkTime.add(projectWorkTimeVO);
+                    filteredProjectWorkTime.add(projectWorkTimeVO);
                 }
             }
 
+            // 过滤 nickName 和 projectWorkTime
             if (filter == 2) {
-                List<String> nickName2 = new ArrayList<>();
+                Set<Integer> nonZeroIndices = new HashSet<>();
                 for (int i = 0; i < nickName.size(); i++) {
-                    BigDecimal workerTimeSum = BigDecimal.ZERO;
-                    for (int j = 0; j < projectWorkTime.size(); j++) {
-                        BigDecimal bigDecimal = projectWorkTime.get(j).getWorkTime().get(i);
-                        workerTimeSum = workerTimeSum.add(bigDecimal);
+                    BigDecimal totalWorkTime = BigDecimal.ZERO;
+                    for (int j = 0; j < filteredProjectWorkTime.size(); j++) {
+                        totalWorkTime = totalWorkTime.add(filteredProjectWorkTime.get(j).getWorkTime().get(i));
                     }
-                    if (workerTimeSum.compareTo(BigDecimal.ZERO) != 0) {
-                        nickName2.add(nickName.get(i));
+                    if (totalWorkTime.compareTo(BigDecimal.ZERO) != 0) {
+                        filteredNickName.add(nickName.get(i));
+                        nonZeroIndices.add(i);
                     }
                 }
-                nickName = nickName2;
+                for (int i = filteredProjectWorkTime.size() - 1; i >= 0; i--) {
+                    List<BigDecimal> workTime = filteredProjectWorkTime.get(i).getWorkTime();
+                    for (int j = workTime.size() - 1; j >= 0; j--) {
+                        if (!nonZeroIndices.contains(j)) {
+                            workTime.remove(j);
+                        }
+                    }
+                    if (workTime.isEmpty()) {
+                        filteredProjectWorkTime.remove(i);
+                    }
+                }
+            } else {
+                filteredNickName.addAll(nickName);
             }
-            returnList.add(nickName);
-            returnList.add(projectWorkTime);
+
+            returnList.add(filteredNickName);
+            returnList.add(filteredProjectWorkTime);
         }
         return returnList;
     }
@@ -1084,7 +1140,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         if (userId != null) {
             userIdS.add(userId);
         }
-        List<SysUser> users = userNameList(userIdS);
+        List<SysUser> users = userNameList(userIdS, workerOrProject);
         List<Long> userIds = new ArrayList<>();
         List<String> nickName = new ArrayList<>();
         for (SysUser user : users) {

+ 0 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/MybatisGeneratorUtils.java


+ 2 - 23
service-oa/service-oa-biz/src/main/java/com/usky/oa/ServiceOaApplication.java

@@ -1,13 +1,5 @@
 package com.usky.oa;
-
-
-
-import com.usky.oa.constant.constant;
 import io.swagger.annotations.SwaggerDefinition;
-import lombok.val;
-import me.chanjar.weixin.mp.api.WxMpService;
-import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
-import me.chanjar.weixin.mp.config.impl.WxMpMapConfigImpl;
 import org.mybatis.spring.annotation.MapperScan;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -16,10 +8,8 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.core.env.Environment;
-
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 
@@ -37,21 +27,10 @@ import java.net.UnknownHostException;
 @EnableRabbit
 public class ServiceOaApplication
 {
-    private static final Logger LOGGER = LoggerFactory.getLogger(RuoYiSystemApplication.class);
-
-    @Bean
-    public WxMpService wxMpService(){
-        WxMpMapConfigImpl wxMpMapConfig = new WxMpMapConfigImpl();
-        wxMpMapConfig.setAppId(constant.WE_CHAT_APP_ID);
-        wxMpMapConfig.setSecret(constant.WE_CHAT_SECRET);
-        val wxMpService = new WxMpServiceImpl();
-        wxMpService.setWxMpConfigStorage(wxMpMapConfig);
-
-        return wxMpService;
-    }
+    private static final Logger LOGGER = LoggerFactory.getLogger(ServiceOaApplication.class);
 
     public static void main(String[] args) throws UnknownHostException {
-        ConfigurableApplicationContext application = SpringApplication.run(RuoYiSystemApplication.class, args);
+        ConfigurableApplicationContext application = SpringApplication.run(ServiceOaApplication.class, args);
         Environment env = application.getEnvironment();
         String ip = InetAddress.getLocalHost().getHostAddress();
         String port = env.getProperty("server.port");

+ 16 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/constant/OaApprovalConstant.java

@@ -0,0 +1,16 @@
+package com.usky.oa.constant;
+
+public class OaApprovalConstant {
+
+    //E:未提交可以修改
+    public final static String APPROVAL_STATUS_E = "E";
+    //F:审批中不允许修改
+    public final static String APPROVAL_STATUS_F = "F";
+    //G:审批通过不允许修改
+    public final static String APPROVAL_STATUS_G = "G";
+    //H:审批不通过
+    public final static String APPROVAL_STATUS_H = "H";
+    //I:撤销状态
+    public final static String APPROVAL_STATUS_I = "I";
+    
+}

+ 86 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalAccountController.java

@@ -0,0 +1,86 @@
+package com.usky.oa.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.oa.domain.OaApprovalAccount;
+import com.usky.oa.service.OaApprovalAccountService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 审批_账号权限 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@RestController
+@RequestMapping("/oaApprovalAccount")
+public class OaApprovalAccountController {
+
+    @Autowired
+    private OaApprovalAccountService approvalAccountService;
+
+    /**
+     * 列表查询
+     * @param authType
+     * @param userId
+     * @param docType
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "审批账号权限-列表查询", notes = "审批账号权限-列表查询")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public ApiResult<?> list(
+            @ApiParam("权限类型") @RequestParam(name = "authType", required = false) Integer authType,
+            @ApiParam("用户ID") @RequestParam(name = "userId", required = false) Integer userId,
+            @ApiParam("单据类型") @RequestParam(name = "docType", required = false) String docType,
+            @ApiParam("") @RequestParam(name = "", required = false, defaultValue = "1") Integer pageNum,
+            @ApiParam("单据类型") @RequestParam(name = "docType", required = false, defaultValue = "10") Integer pageSize) {
+        CommonPage<OaApprovalAccount> list = approvalAccountService.list(authType, userId, docType, pageNum, pageSize);
+        return ApiResult.success(list);
+    }
+
+    /**
+     * 编辑
+     */
+    @ApiOperation(value = "审批账号权限-编辑", notes = "审批账号权限-编辑")
+    @PutMapping(value = "/edit")
+    public ApiResult<?> edit(@RequestBody List<OaApprovalAccount> approvalAccountList) {
+        UserTokenModel userTokenModel = SessionCache.get();
+        Integer customerId = userTokenModel.getRootGroupId();
+        SecurityUtils.getLoginUser().get
+        approvalAccountService.update(approvalAccountList, customerId);
+        return ResultWrapper.ok("编辑成功!");
+    }
+
+    // /**
+    //  * 组织结构可用人数
+    //  * @param approvalAccount
+    //  * @return
+    //  */
+    // @ApiOperation(value = "组织结构可用人数", notes = "组织结构可用人数")
+    // @RequestMapping(value = "/findAvailableNum", method = RequestMethod.GET)
+    // public ResultWrapper<?> findAvailableNum(@ApiParam("组织结构Id 21,34,54") @RequestParam(name = "orgIds", required = true) String orgIds) {
+    //     List<Integer> orgIdList = Arrays.asList(orgIds.split(",")).stream().map(Integer::new).collect(Collectors.toList());
+    //     List<Map<String, Integer>> result = approvalAccountService.findAvailableNum(orgIdList);
+    //     return ResultWrapper.ok(result);
+    // }
+
+
+}
+

+ 177 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalCoreController.java

@@ -0,0 +1,177 @@
+//////////////////////////////////////////////////////////////////////////
+//             Copyright 2020  All Rights Reserved                //
+//////////////////////////////////////////////////////////////////////////
+/*
+ * =======================================================================
+ * 系统名 : 太的环卫平台
+ * 子系统名 : 审批子系统
+ * Class名 : ApprovalCoreController
+ * 概要 :
+ * 改版履历 :
+ * 版本 日期 作者名 备注
+ * 1.0.0 2020-09-08 guoenzhou 初次作成
+ * =======================================================================
+ */
+package com.usky.oa.controller.web;
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.oa.service.OaApprovalCoreService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * @Description: 审批申请单
+ * @author: guoenzhou
+ * @date:   2020-09-08
+ * @Version: V1.0
+ */
+@Api(tags="审批流转控制")
+@RestController
+@RequestMapping("/approvalCore")
+public class OaApprovalCoreController {
+
+    @Autowired
+    private OaApprovalCoreService oaApprovalCoreService;
+
+    /**
+     * 页面点击同意或者不同意处理按钮
+     * @param opinion
+     * @param status
+     * @param approvalId
+     * @return
+     */
+    @ApiOperation(value="审批流转-审批处理按钮", notes="页面点击同意或者不同意处理按钮")
+    @RequestMapping(value = "/doApproval",method = RequestMethod.POST)
+    @WebApi
+    public ResultWrapper<?> doApproval(@RequestBody ApprovalRecordRequestVo bean) {
+        UserTokenModel userTokenModel = SessionCache.get();
+        Integer customerId = userTokenModel.getRootGroupId();
+        Integer userId = userTokenModel.getUserId();
+        ResultWrapper<?> result = oaApprovalCoreService.doApproval(bean.getOpinion(),bean.getStatus(),bean.getApprovalId(),userId);
+        return result;
+    }
+
+    /**
+     * 批量审批
+     * @param opinion
+     * @param status
+     * @param approvalId
+     * @return
+     */
+    @ApiOperation(value="审批流转-批量审批", notes="审批流转-批量审批")
+    @RequestMapping(value = "/doBatchApproval",method = RequestMethod.POST)
+    @WebApi
+    public ResultWrapper<?> doBatchApproval(@RequestBody DoBatchApprovalRequestVo doBatchApprovalRequestVo) {
+        UserTokenModel userTokenModel = SessionCache.get();
+        Integer userId = userTokenModel.getUserId();
+        Integer[] approvalIds = doBatchApprovalRequestVo.getApprovalIds();
+        for (Integer approvalId : approvalIds) {
+            oaApprovalCoreService.doApproval("", "G", approvalId, userId);
+        }
+        return ResultWrapper.ok("提交成功");
+    }
+
+    /**
+     * 用户提交单据,调用此方法进入审批  submitDocument
+     */
+    @ApiOperation(value="审批流转-用户提交单据审批", notes="用户提交单据,调用此方法进入审批")
+    @RequestMapping(value = "/submitDocument",method = {RequestMethod.GET,RequestMethod.POST})
+    public ApiResult<?> submitDocument(@ApiParam("申请单ID")  @RequestParam Integer docId,
+                                       @ApiParam("流程ID")  @RequestParam  Integer flowId) {
+        Long userId = SecurityUtils.getUserId();
+        return oaApprovalCoreService.submitDocument(docId,flowId,userId);
+    }
+
+
+    /**
+     * 审批历史
+     * @param docId
+     */
+    @ApiOperation(value="审批流转-审批历史", notes="审批流转-审批历史")
+    @RequestMapping(value = "/findApprovalRecord", method = RequestMethod.GET)
+    public ResultWrapper<List<ApprovalRecordReponseVo>> findApprovalRecord(@ApiParam("申请单ID") @RequestParam  Integer docId,
+                                                                           @ApiParam("流程ID")   @RequestParam  Integer flowId) {
+        List<ApprovalRecordReponseVo> result =  oaApprovalCoreService.approvalHistory(docId,flowId);
+        return ResultWrapper.ok(result);
+    }
+
+    /**
+     * 单据审批进程图
+     * @param  flowId
+     */
+    @ApiOperation(value="审批流转-单据审批进程", notes="查看某个流程的审批链")
+    @RequestMapping(value = "/getApprovalNodes", method = RequestMethod.GET)
+    public ResultWrapper<List<ApprovalNodeVo>> getApprovalNodes(@ApiParam("申请单ID")  @RequestParam Integer flowId,
+                                                                @ApiParam("流程ID")   @RequestParam Integer docId) {
+        List<ApprovalNodeVo> result =  oaApprovalCoreService.getApprovalNodes(flowId,docId);
+        return ResultWrapper.ok(result);
+    }
+
+
+
+    /**
+     * 待我审批列表
+     * @param docNo
+     * @param docType
+     * @param deptId
+     * @param status
+     * @param pageNo
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value="审批流转-待我审批列表", notes="按照ID查询我审批的列表")
+    @RequestMapping(value = "/findOwnerApproval", method = RequestMethod.GET)
+    @WebApi
+    public ResultWrapper<PaginationWrapper<OwnerApprovalReponse>>  findOwnerApproval(@ApiParam("单据单号") @RequestParam(name = "docNo", required = false )  String docNo,
+                                                                                     @ApiParam("单据类型") @RequestParam(name = "docType", required = false) String docType,
+                                                                                     @ApiParam("部门ID") @RequestParam(name = "deptId", required = false) Integer deptId,
+                                                                                     @ApiParam("审批状态") @RequestParam(name = "status", required = false) String status,
+                                                                                     @ApiParam("当前页") @RequestParam(name="page", defaultValue="1") Integer pageNo,
+                                                                                     @ApiParam("一页显示条数") @RequestParam(name="pageSize", defaultValue="10") Integer pageSize
+                                                               ) {
+        UserTokenModel userTokenModel = SessionCache.get();
+        Integer customerId = userTokenModel.getRootGroupId();
+        Integer approvalUid = userTokenModel.getUserId();
+        OwnerApprovalRequest ownerApprovalRequest = new OwnerApprovalRequest();
+        if(StringUtils.isNotEmpty(docNo))ownerApprovalRequest.setDocNo(docNo);
+        if(StringUtils.isNotEmpty(docType))ownerApprovalRequest.setDocType(docType);
+        if(StringUtils.isNotEmpty(status))ownerApprovalRequest.setStatus(status);
+        ownerApprovalRequest.setDeptId(deptId);
+        ownerApprovalRequest.setPageNo(pageNo);
+        ownerApprovalRequest.setPageSize(pageSize);
+        PaginationWrapper<OwnerApprovalReponse> result = oaApprovalCoreService.findOwnerApproval(ownerApprovalRequest,approvalUid);
+        return ResultWrapper.ok(result);
+    }
+
+    /**
+     * 撤销申请
+     * @param  flowId
+     */
+    @ApiOperation(value="审批流转-撤销申请", notes="审批流转-撤销申请")
+    @RequestMapping(value = "/resetDoc", method = RequestMethod.GET)
+    @WebApi
+    public ResultWrapper<?> reset(@ApiParam("申请单ID")   @RequestParam Integer docId) {
+        UserTokenModel userTokenModel = SessionCache.get();
+        String userName = userTokenModel.getUserName();
+        boolean bln  = oaApprovalCoreService.resetDoc(docId,userName);
+        if(bln){
+            return ResultWrapper.ok(bln);
+        }
+        return ResultWrapper.fail(4001,"撤销失败,请重试");
+
+    }
+
+
+
+
+
+
+
+}
+

+ 48 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalDocumentController.java

@@ -0,0 +1,48 @@
+package com.usky.oa.controller.web;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.oa.domain.OaApprovalDocument;
+import com.usky.oa.service.OaApprovalDocumentService;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * <p>
+ * 审批_申请单表 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Controller
+@RequestMapping("/oaApprovalDocument")
+public class OaApprovalDocumentController {
+    @Autowired
+    private OaApprovalDocumentService approvalDocumentService;
+
+    /**
+     * 审批单据-所有单据列表
+     */
+    @ApiOperation(value="审批单据-所有单据列表", notes="审批单据- 所有单据列表")
+    @RequestMapping(value = "/queryAll", method = RequestMethod.GET)
+    public ApiResult<CommonPage<OaApprovalDocument>> queryPageList(
+            @ApiParam("单据类型") @RequestParam(name="docType", required = false) String docType,
+            @ApiParam("审批状态") @RequestParam(name="status", required = false) String status,
+            @ApiParam("审批编号") @RequestParam(name="docNo", required = false) String docNo,
+            @ApiParam("当前页") @RequestParam(name="page", defaultValue="1") Integer pageNum,
+            @ApiParam("一页显示条数") @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
+        CommonPage<OaApprovalDocument> page = approvalDocumentService.page(docType, status, docNo, pageNum, pageSize);
+        return ApiResult.success(page);
+    }
+
+}
+

+ 146 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalFlowController.java

@@ -0,0 +1,146 @@
+package com.usky.oa.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.oa.domain.OaApprovalFlow;
+import com.usky.oa.service.OaApprovalFlowService;
+import com.usky.oa.service.vo.OaApprovalFlowRequestVo;
+import com.usky.oa.service.vo.OaApprovalNodeVo;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 审批_审批流程 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Controller
+@RequestMapping("/oaApprovalFlow")
+public class OaApprovalFlowController {
+    @Autowired
+    private OaApprovalFlowService approvalFlowService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param docType
+     * @param pageNo
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value="审批流程-分页列表查询", notes="审批流程-分页列表查询")
+    @GetMapping("/list")
+    public ApiResult<CommonPage<OaApprovalFlow>> queryPageList(
+            @ApiParam("单据类型") @RequestParam(name="docType", required = false) String docType,
+            @ApiParam("当前页") @RequestParam(name="page", defaultValue="1") Integer pageNo,
+            @ApiParam("一页显示条数") @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
+        return ApiResult.success(approvalFlowService.page(docType,pageNo,pageSize));
+    }
+
+    /**
+     * 添加
+     *
+     * @param approvalFlow
+     * @return
+     */
+    @ApiOperation(value="审批流程-添加", notes="审批流程-添加")
+    @PostMapping(value = "/add")
+    public ApiResult<?> add(@RequestBody OaApprovalFlowRequestVo approvalFlow) {
+        approvalFlowService.save(approvalFlow);
+        return ApiResult.success("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param approvalFlow
+     * @return
+     */
+    @ApiOperation(value="审批流程-编辑", notes="审批流程-编辑")
+    @PutMapping(value = "/edit")
+    public ApiResult<?> edit(@RequestBody OaApprovalFlowRequestVo approvalFlow) {
+        approvalFlowService.edit(approvalFlow);
+        return ApiResult.success("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value="审批流程-通过id删除", notes="审批流程-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public ApiResult<?> delete(@RequestParam(name="id",required=true) Integer id) {
+        approvalFlowService.removeById(id);
+        return ApiResult.success("删除成功!");
+    }
+
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value="审批流程-通过id查询", notes="审批流程-通过id查询")
+    @GetMapping(value = "/queryById")
+    public ApiResult<?> queryById(@RequestParam(name="id",required=true) Integer id) {
+        OaApprovalFlow approvalFlow = approvalFlowService.getById(id);
+        return ApiResult.success(approvalFlow);
+    }
+
+    /**
+     * 通过flowId查询
+     *
+     * @param flowId
+     * @return
+     */
+    @ApiOperation(value="审批流程-通过id获取节点列表", notes="审批流程-通过id获取节点列表")
+    @GetMapping(value = "/queryNodesByFlowId")
+    public ApiResult<List<OaApprovalNodeVo>> queryNodesByFlowId(@RequestParam(name="flowId",required=true) Integer flowId) {
+        List<OaApprovalNodeVo> result =  approvalFlowService.getFlowNodes(flowId);
+        return ApiResult.success(result);
+    }
+
+    /**
+     * 通过docType获取流程列表
+     *
+     * @param docType
+     * @return
+     */
+    @ApiOperation(value="审批流程-通过docType获取流程列表", notes="审批流程-通过docType获取流程列表")
+    @GetMapping(value = "/queryByDocType")
+    @WebApi
+    public ApiResult<List<ApprovalFlow>> queryByDocType(@ApiParam("单据类型") @RequestParam(name="docType",required=true) String docType) {
+        UserTokenModel userTokenModel = SessionCache.get();
+        Integer customerId = userTokenModel.getRootGroupId();
+        List<ApprovalFlow> approvalFlow = approvalFlowService.queryByDocType(docType,customerId);
+        return ApiResult.success(approvalFlow);
+    }
+
+    /**
+     * 通过flowId获取审批中单据
+     *
+     * @param docType
+     * @return
+     */
+    @ApiOperation(value="审批流程-通过flowId获取审批中单据", notes="审批流程-通过flowId获取审批中单据")
+    @GetMapping(value = "/queryDocsByFlowId")
+    public ApiResult<List<ApprovalDocument>> queryDocsByFlowId(@RequestParam(name="flowId",required=true) Integer flowId) {
+        List<ApprovalDocument> approvalDocumentList = approvalFlowService.findDocsByFlowId(flowId);
+        return ApiResult.success(approvalDocumentList);
+    }
+}
+

+ 21 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalNodeController.java

@@ -0,0 +1,21 @@
+package com.usky.oa.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 审批_审批节点 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Controller
+@RequestMapping("/oaApprovalNode")
+public class OaApprovalNodeController {
+
+}
+

+ 21 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalRecordController.java

@@ -0,0 +1,21 @@
+package com.usky.oa.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 审批_审批记录表 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Controller
+@RequestMapping("/oaApprovalRecord")
+public class OaApprovalRecordController {
+
+}
+

+ 86 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalAccount.java

@@ -0,0 +1,86 @@
+package com.usky.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 审批_账号权限
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OaApprovalAccount implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 权限类型 1: 提交申请权限  2:审批人权限
+     */
+    private Integer authType;
+
+    /**
+     * 单据类型
+     */
+    private String docType;
+
+    /**
+     * 流程ID
+     */
+    private Integer flowId;
+
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+
+    /**
+     * 用户名称
+     */
+    private String userName;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 761 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalAccountExample.java

@@ -0,0 +1,761 @@
+package com.usky.oa.domain;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class OaApprovalAccountExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public ApprovalAccountExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeIsNull() {
+            addCriterion("auth_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeIsNotNull() {
+            addCriterion("auth_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeEqualTo(Integer value) {
+            addCriterion("auth_type =", value, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeNotEqualTo(Integer value) {
+            addCriterion("auth_type <>", value, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeGreaterThan(Integer value) {
+            addCriterion("auth_type >", value, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("auth_type >=", value, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeLessThan(Integer value) {
+            addCriterion("auth_type <", value, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeLessThanOrEqualTo(Integer value) {
+            addCriterion("auth_type <=", value, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeIn(List<Integer> values) {
+            addCriterion("auth_type in", values, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeNotIn(List<Integer> values) {
+            addCriterion("auth_type not in", values, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeBetween(Integer value1, Integer value2) {
+            addCriterion("auth_type between", value1, value2, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andAuthTypeNotBetween(Integer value1, Integer value2) {
+            addCriterion("auth_type not between", value1, value2, "authType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIsNull() {
+            addCriterion("doc_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIsNotNull() {
+            addCriterion("doc_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeEqualTo(String value) {
+            addCriterion("doc_type =", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotEqualTo(String value) {
+            addCriterion("doc_type <>", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeGreaterThan(String value) {
+            addCriterion("doc_type >", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeGreaterThanOrEqualTo(String value) {
+            addCriterion("doc_type >=", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLessThan(String value) {
+            addCriterion("doc_type <", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLessThanOrEqualTo(String value) {
+            addCriterion("doc_type <=", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLike(String value) {
+            addCriterion("doc_type like", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotLike(String value) {
+            addCriterion("doc_type not like", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIn(List<String> values) {
+            addCriterion("doc_type in", values, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotIn(List<String> values) {
+            addCriterion("doc_type not in", values, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeBetween(String value1, String value2) {
+            addCriterion("doc_type between", value1, value2, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotBetween(String value1, String value2) {
+            addCriterion("doc_type not between", value1, value2, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIsNull() {
+            addCriterion("flow_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIsNotNull() {
+            addCriterion("flow_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdEqualTo(Integer value) {
+            addCriterion("flow_id =", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotEqualTo(Integer value) {
+            addCriterion("flow_id <>", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdGreaterThan(Integer value) {
+            addCriterion("flow_id >", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("flow_id >=", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdLessThan(Integer value) {
+            addCriterion("flow_id <", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdLessThanOrEqualTo(Integer value) {
+            addCriterion("flow_id <=", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIn(List<Integer> values) {
+            addCriterion("flow_id in", values, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotIn(List<Integer> values) {
+            addCriterion("flow_id not in", values, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdBetween(Integer value1, Integer value2) {
+            addCriterion("flow_id between", value1, value2, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("flow_id not between", value1, value2, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdIsNull() {
+            addCriterion("user_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdIsNotNull() {
+            addCriterion("user_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdEqualTo(Integer value) {
+            addCriterion("user_id =", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdNotEqualTo(Integer value) {
+            addCriterion("user_id <>", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdGreaterThan(Integer value) {
+            addCriterion("user_id >", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("user_id >=", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdLessThan(Integer value) {
+            addCriterion("user_id <", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdLessThanOrEqualTo(Integer value) {
+            addCriterion("user_id <=", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdIn(List<Integer> values) {
+            addCriterion("user_id in", values, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdNotIn(List<Integer> values) {
+            addCriterion("user_id not in", values, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdBetween(Integer value1, Integer value2) {
+            addCriterion("user_id between", value1, value2, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("user_id not between", value1, value2, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameIsNull() {
+            addCriterion("user_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameIsNotNull() {
+            addCriterion("user_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameEqualTo(String value) {
+            addCriterion("user_name =", value, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameNotEqualTo(String value) {
+            addCriterion("user_name <>", value, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameGreaterThan(String value) {
+            addCriterion("user_name >", value, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameGreaterThanOrEqualTo(String value) {
+            addCriterion("user_name >=", value, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameLessThan(String value) {
+            addCriterion("user_name <", value, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameLessThanOrEqualTo(String value) {
+            addCriterion("user_name <=", value, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameLike(String value) {
+            addCriterion("user_name like", value, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameNotLike(String value) {
+            addCriterion("user_name not like", value, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameIn(List<String> values) {
+            addCriterion("user_name in", values, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameNotIn(List<String> values) {
+            addCriterion("user_name not in", values, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameBetween(String value1, String value2) {
+            addCriterion("user_name between", value1, value2, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserNameNotBetween(String value1, String value2) {
+            addCriterion("user_name not between", value1, value2, "userName");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNull() {
+            addCriterion("customer_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNotNull() {
+            addCriterion("customer_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdEqualTo(Integer value) {
+            addCriterion("customer_id =", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotEqualTo(Integer value) {
+            addCriterion("customer_id <>", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThan(Integer value) {
+            addCriterion("customer_id >", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("customer_id >=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThan(Integer value) {
+            addCriterion("customer_id <", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThanOrEqualTo(Integer value) {
+            addCriterion("customer_id <=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIn(List<Integer> values) {
+            addCriterion("customer_id in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotIn(List<Integer> values) {
+            addCriterion("customer_id not in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id not between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 116 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalDocument.java

@@ -0,0 +1,116 @@
+package com.usky.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 审批_申请单表
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OaApprovalDocument implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 单据编号
+     */
+    private String docNo;
+
+    /**
+     * 单据类型
+     */
+    private String docType;
+
+    /**
+     * 申请人ID
+     */
+    private Integer proposer;
+
+    /**
+     * 申请事由
+     */
+    private String reason;
+
+    /**
+     * 单据扩展数据
+     */
+    private String docData;
+
+    /**
+     * 提交日期
+     */
+    private LocalDateTime submitTime;
+
+    /**
+     * 单据状态 E:未提交可以修改 F:审批中不允许修改 G:审批通过不允许修改 H:审批不通过 I:撤销状态
+     */
+    private String status;
+
+    /**
+     * 审批流程ID
+     */
+    private Integer flowId;
+
+    /**
+     * 创建人ID
+     */
+    private Integer creator;
+
+    /**
+     * 业务系统ID
+     */
+    private Integer customerId;
+
+    /**
+     * 事件状态 0:未同步,1:已同步,2:同步异常
+     */
+    private Integer eventStatus;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 1151 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalDocumentExample.java

@@ -0,0 +1,1151 @@
+package com.usky.oa.domain;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class OaApprovalDocumentExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public OaApprovalDocumentExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoIsNull() {
+            addCriterion("doc_no is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoIsNotNull() {
+            addCriterion("doc_no is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoEqualTo(String value) {
+            addCriterion("doc_no =", value, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoNotEqualTo(String value) {
+            addCriterion("doc_no <>", value, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoGreaterThan(String value) {
+            addCriterion("doc_no >", value, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoGreaterThanOrEqualTo(String value) {
+            addCriterion("doc_no >=", value, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoLessThan(String value) {
+            addCriterion("doc_no <", value, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoLessThanOrEqualTo(String value) {
+            addCriterion("doc_no <=", value, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoLike(String value) {
+            addCriterion("doc_no like", value, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoNotLike(String value) {
+            addCriterion("doc_no not like", value, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoIn(List<String> values) {
+            addCriterion("doc_no in", values, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoNotIn(List<String> values) {
+            addCriterion("doc_no not in", values, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoBetween(String value1, String value2) {
+            addCriterion("doc_no between", value1, value2, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocNoNotBetween(String value1, String value2) {
+            addCriterion("doc_no not between", value1, value2, "docNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIsNull() {
+            addCriterion("doc_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIsNotNull() {
+            addCriterion("doc_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeEqualTo(String value) {
+            addCriterion("doc_type =", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotEqualTo(String value) {
+            addCriterion("doc_type <>", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeGreaterThan(String value) {
+            addCriterion("doc_type >", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeGreaterThanOrEqualTo(String value) {
+            addCriterion("doc_type >=", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLessThan(String value) {
+            addCriterion("doc_type <", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLessThanOrEqualTo(String value) {
+            addCriterion("doc_type <=", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLike(String value) {
+            addCriterion("doc_type like", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotLike(String value) {
+            addCriterion("doc_type not like", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIn(List<String> values) {
+            addCriterion("doc_type in", values, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotIn(List<String> values) {
+            addCriterion("doc_type not in", values, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeBetween(String value1, String value2) {
+            addCriterion("doc_type between", value1, value2, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotBetween(String value1, String value2) {
+            addCriterion("doc_type not between", value1, value2, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerIsNull() {
+            addCriterion("proposer is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerIsNotNull() {
+            addCriterion("proposer is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerEqualTo(Integer value) {
+            addCriterion("proposer =", value, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerNotEqualTo(Integer value) {
+            addCriterion("proposer <>", value, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerGreaterThan(Integer value) {
+            addCriterion("proposer >", value, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerGreaterThanOrEqualTo(Integer value) {
+            addCriterion("proposer >=", value, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerLessThan(Integer value) {
+            addCriterion("proposer <", value, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerLessThanOrEqualTo(Integer value) {
+            addCriterion("proposer <=", value, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerIn(List<Integer> values) {
+            addCriterion("proposer in", values, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerNotIn(List<Integer> values) {
+            addCriterion("proposer not in", values, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerBetween(Integer value1, Integer value2) {
+            addCriterion("proposer between", value1, value2, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andProposerNotBetween(Integer value1, Integer value2) {
+            addCriterion("proposer not between", value1, value2, "proposer");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdIsNull() {
+            addCriterion("dept_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdIsNotNull() {
+            addCriterion("dept_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdEqualTo(Integer value) {
+            addCriterion("dept_id =", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdNotEqualTo(Integer value) {
+            addCriterion("dept_id <>", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdGreaterThan(Integer value) {
+            addCriterion("dept_id >", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("dept_id >=", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdLessThan(Integer value) {
+            addCriterion("dept_id <", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdLessThanOrEqualTo(Integer value) {
+            addCriterion("dept_id <=", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdIn(List<Integer> values) {
+            addCriterion("dept_id in", values, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdNotIn(List<Integer> values) {
+            addCriterion("dept_id not in", values, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdBetween(Integer value1, Integer value2) {
+            addCriterion("dept_id between", value1, value2, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("dept_id not between", value1, value2, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonIsNull() {
+            addCriterion("reason is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonIsNotNull() {
+            addCriterion("reason is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonEqualTo(String value) {
+            addCriterion("reason =", value, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonNotEqualTo(String value) {
+            addCriterion("reason <>", value, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonGreaterThan(String value) {
+            addCriterion("reason >", value, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonGreaterThanOrEqualTo(String value) {
+            addCriterion("reason >=", value, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonLessThan(String value) {
+            addCriterion("reason <", value, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonLessThanOrEqualTo(String value) {
+            addCriterion("reason <=", value, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonLike(String value) {
+            addCriterion("reason like", value, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonNotLike(String value) {
+            addCriterion("reason not like", value, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonIn(List<String> values) {
+            addCriterion("reason in", values, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonNotIn(List<String> values) {
+            addCriterion("reason not in", values, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonBetween(String value1, String value2) {
+            addCriterion("reason between", value1, value2, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andReasonNotBetween(String value1, String value2) {
+            addCriterion("reason not between", value1, value2, "reason");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataIsNull() {
+            addCriterion("doc_data is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataIsNotNull() {
+            addCriterion("doc_data is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataEqualTo(String value) {
+            addCriterion("doc_data =", value, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataNotEqualTo(String value) {
+            addCriterion("doc_data <>", value, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataGreaterThan(String value) {
+            addCriterion("doc_data >", value, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataGreaterThanOrEqualTo(String value) {
+            addCriterion("doc_data >=", value, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataLessThan(String value) {
+            addCriterion("doc_data <", value, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataLessThanOrEqualTo(String value) {
+            addCriterion("doc_data <=", value, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataLike(String value) {
+            addCriterion("doc_data like", value, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataNotLike(String value) {
+            addCriterion("doc_data not like", value, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataIn(List<String> values) {
+            addCriterion("doc_data in", values, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataNotIn(List<String> values) {
+            addCriterion("doc_data not in", values, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataBetween(String value1, String value2) {
+            addCriterion("doc_data between", value1, value2, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocDataNotBetween(String value1, String value2) {
+            addCriterion("doc_data not between", value1, value2, "docData");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeIsNull() {
+            addCriterion("submit_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeIsNotNull() {
+            addCriterion("submit_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeEqualTo(Date value) {
+            addCriterion("submit_time =", value, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeNotEqualTo(Date value) {
+            addCriterion("submit_time <>", value, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeGreaterThan(Date value) {
+            addCriterion("submit_time >", value, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("submit_time >=", value, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeLessThan(Date value) {
+            addCriterion("submit_time <", value, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeLessThanOrEqualTo(Date value) {
+            addCriterion("submit_time <=", value, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeIn(List<Date> values) {
+            addCriterion("submit_time in", values, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeNotIn(List<Date> values) {
+            addCriterion("submit_time not in", values, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeBetween(Date value1, Date value2) {
+            addCriterion("submit_time between", value1, value2, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitTimeNotBetween(Date value1, Date value2) {
+            addCriterion("submit_time not between", value1, value2, "submitTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(String value) {
+            addCriterion("status =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(String value) {
+            addCriterion("status <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(String value) {
+            addCriterion("status >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(String value) {
+            addCriterion("status >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(String value) {
+            addCriterion("status <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(String value) {
+            addCriterion("status <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLike(String value) {
+            addCriterion("status like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotLike(String value) {
+            addCriterion("status not like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<String> values) {
+            addCriterion("status in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<String> values) {
+            addCriterion("status not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(String value1, String value2) {
+            addCriterion("status between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(String value1, String value2) {
+            addCriterion("status not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIsNull() {
+            addCriterion("flow_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIsNotNull() {
+            addCriterion("flow_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdEqualTo(Integer value) {
+            addCriterion("flow_id =", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotEqualTo(Integer value) {
+            addCriterion("flow_id <>", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdGreaterThan(Integer value) {
+            addCriterion("flow_id >", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("flow_id >=", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdLessThan(Integer value) {
+            addCriterion("flow_id <", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdLessThanOrEqualTo(Integer value) {
+            addCriterion("flow_id <=", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIn(List<Integer> values) {
+            addCriterion("flow_id in", values, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotIn(List<Integer> values) {
+            addCriterion("flow_id not in", values, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdBetween(Integer value1, Integer value2) {
+            addCriterion("flow_id between", value1, value2, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("flow_id not between", value1, value2, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorIsNull() {
+            addCriterion("creator is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorIsNotNull() {
+            addCriterion("creator is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorEqualTo(Integer value) {
+            addCriterion("creator =", value, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorNotEqualTo(Integer value) {
+            addCriterion("creator <>", value, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorGreaterThan(Integer value) {
+            addCriterion("creator >", value, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorGreaterThanOrEqualTo(Integer value) {
+            addCriterion("creator >=", value, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorLessThan(Integer value) {
+            addCriterion("creator <", value, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorLessThanOrEqualTo(Integer value) {
+            addCriterion("creator <=", value, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorIn(List<Integer> values) {
+            addCriterion("creator in", values, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorNotIn(List<Integer> values) {
+            addCriterion("creator not in", values, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorBetween(Integer value1, Integer value2) {
+            addCriterion("creator between", value1, value2, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatorNotBetween(Integer value1, Integer value2) {
+            addCriterion("creator not between", value1, value2, "creator");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNull() {
+            addCriterion("customer_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNotNull() {
+            addCriterion("customer_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdEqualTo(Integer value) {
+            addCriterion("customer_id =", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotEqualTo(Integer value) {
+            addCriterion("customer_id <>", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThan(Integer value) {
+            addCriterion("customer_id >", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("customer_id >=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThan(Integer value) {
+            addCriterion("customer_id <", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThanOrEqualTo(Integer value) {
+            addCriterion("customer_id <=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIn(List<Integer> values) {
+            addCriterion("customer_id in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotIn(List<Integer> values) {
+            addCriterion("customer_id not in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id not between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusIsNull() {
+            addCriterion("event_status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusIsNotNull() {
+            addCriterion("event_status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusEqualTo(Integer value) {
+            addCriterion("event_status =", value, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusNotEqualTo(Integer value) {
+            addCriterion("event_status <>", value, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusGreaterThan(Integer value) {
+            addCriterion("event_status >", value, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("event_status >=", value, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusLessThan(Integer value) {
+            addCriterion("event_status <", value, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("event_status <=", value, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusIn(List<Integer> values) {
+            addCriterion("event_status in", values, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusNotIn(List<Integer> values) {
+            addCriterion("event_status not in", values, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusBetween(Integer value1, Integer value2) {
+            addCriterion("event_status between", value1, value2, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andEventStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("event_status not between", value1, value2, "eventStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 86 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalFlow.java

@@ -0,0 +1,86 @@
+package com.usky.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 审批_审批流程
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OaApprovalFlow implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 流程名称
+     */
+    private String flowName;
+
+    /**
+     * 单据类型 单据类型 QJD:请假单  JBD:加班单  RZD:入职单 XJD:销假单  DTD:单位调动单 KTD:跨单位调动单
+     */
+    private String docType;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 业务系统ID
+     */
+    private Integer customerId;
+
+    /**
+     * 删除状态
+     */
+    private Integer isDelete;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 851 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalFlowExample.java

@@ -0,0 +1,851 @@
+package com.usky.oa.domain;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class OaApprovalFlowExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public OaApprovalFlowExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameIsNull() {
+            addCriterion("flow_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameIsNotNull() {
+            addCriterion("flow_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameEqualTo(String value) {
+            addCriterion("flow_name =", value, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameNotEqualTo(String value) {
+            addCriterion("flow_name <>", value, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameGreaterThan(String value) {
+            addCriterion("flow_name >", value, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameGreaterThanOrEqualTo(String value) {
+            addCriterion("flow_name >=", value, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameLessThan(String value) {
+            addCriterion("flow_name <", value, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameLessThanOrEqualTo(String value) {
+            addCriterion("flow_name <=", value, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameLike(String value) {
+            addCriterion("flow_name like", value, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameNotLike(String value) {
+            addCriterion("flow_name not like", value, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameIn(List<String> values) {
+            addCriterion("flow_name in", values, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameNotIn(List<String> values) {
+            addCriterion("flow_name not in", values, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameBetween(String value1, String value2) {
+            addCriterion("flow_name between", value1, value2, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowNameNotBetween(String value1, String value2) {
+            addCriterion("flow_name not between", value1, value2, "flowName");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIsNull() {
+            addCriterion("doc_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIsNotNull() {
+            addCriterion("doc_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeEqualTo(String value) {
+            addCriterion("doc_type =", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotEqualTo(String value) {
+            addCriterion("doc_type <>", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeGreaterThan(String value) {
+            addCriterion("doc_type >", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeGreaterThanOrEqualTo(String value) {
+            addCriterion("doc_type >=", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLessThan(String value) {
+            addCriterion("doc_type <", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLessThanOrEqualTo(String value) {
+            addCriterion("doc_type <=", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLike(String value) {
+            addCriterion("doc_type like", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotLike(String value) {
+            addCriterion("doc_type not like", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIn(List<String> values) {
+            addCriterion("doc_type in", values, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotIn(List<String> values) {
+            addCriterion("doc_type not in", values, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeBetween(String value1, String value2) {
+            addCriterion("doc_type between", value1, value2, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotBetween(String value1, String value2) {
+            addCriterion("doc_type not between", value1, value2, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionIsNull() {
+            addCriterion("description is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionIsNotNull() {
+            addCriterion("description is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionEqualTo(String value) {
+            addCriterion("description =", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotEqualTo(String value) {
+            addCriterion("description <>", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionGreaterThan(String value) {
+            addCriterion("description >", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionGreaterThanOrEqualTo(String value) {
+            addCriterion("description >=", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLessThan(String value) {
+            addCriterion("description <", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLessThanOrEqualTo(String value) {
+            addCriterion("description <=", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLike(String value) {
+            addCriterion("description like", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotLike(String value) {
+            addCriterion("description not like", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionIn(List<String> values) {
+            addCriterion("description in", values, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotIn(List<String> values) {
+            addCriterion("description not in", values, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionBetween(String value1, String value2) {
+            addCriterion("description between", value1, value2, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotBetween(String value1, String value2) {
+            addCriterion("description not between", value1, value2, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNull() {
+            addCriterion("customer_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNotNull() {
+            addCriterion("customer_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdEqualTo(Integer value) {
+            addCriterion("customer_id =", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotEqualTo(Integer value) {
+            addCriterion("customer_id <>", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThan(Integer value) {
+            addCriterion("customer_id >", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("customer_id >=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThan(Integer value) {
+            addCriterion("customer_id <", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThanOrEqualTo(Integer value) {
+            addCriterion("customer_id <=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIn(List<Integer> values) {
+            addCriterion("customer_id in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotIn(List<Integer> values) {
+            addCriterion("customer_id not in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id not between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIsNull() {
+            addCriterion("create_user is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIsNotNull() {
+            addCriterion("create_user is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserEqualTo(String value) {
+            addCriterion("create_user =", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserNotEqualTo(String value) {
+            addCriterion("create_user <>", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserGreaterThan(String value) {
+            addCriterion("create_user >", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserGreaterThanOrEqualTo(String value) {
+            addCriterion("create_user >=", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserLessThan(String value) {
+            addCriterion("create_user <", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserLessThanOrEqualTo(String value) {
+            addCriterion("create_user <=", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserLike(String value) {
+            addCriterion("create_user like", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserNotLike(String value) {
+            addCriterion("create_user not like", value, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserIn(List<String> values) {
+            addCriterion("create_user in", values, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserNotIn(List<String> values) {
+            addCriterion("create_user not in", values, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserBetween(String value1, String value2) {
+            addCriterion("create_user between", value1, value2, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateUserNotBetween(String value1, String value2) {
+            addCriterion("create_user not between", value1, value2, "createUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserIsNull() {
+            addCriterion("update_user is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserIsNotNull() {
+            addCriterion("update_user is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserEqualTo(String value) {
+            addCriterion("update_user =", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserNotEqualTo(String value) {
+            addCriterion("update_user <>", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserGreaterThan(String value) {
+            addCriterion("update_user >", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserGreaterThanOrEqualTo(String value) {
+            addCriterion("update_user >=", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserLessThan(String value) {
+            addCriterion("update_user <", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserLessThanOrEqualTo(String value) {
+            addCriterion("update_user <=", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserLike(String value) {
+            addCriterion("update_user like", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserNotLike(String value) {
+            addCriterion("update_user not like", value, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserIn(List<String> values) {
+            addCriterion("update_user in", values, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserNotIn(List<String> values) {
+            addCriterion("update_user not in", values, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserBetween(String value1, String value2) {
+            addCriterion("update_user between", value1, value2, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateUserNotBetween(String value1, String value2) {
+            addCriterion("update_user not between", value1, value2, "updateUser");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNull() {
+            addCriterion("is_delete is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNotNull() {
+            addCriterion("is_delete is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteEqualTo(Integer value) {
+            addCriterion("is_delete =", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotEqualTo(Integer value) {
+            addCriterion("is_delete <>", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThan(Integer value) {
+            addCriterion("is_delete >", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThanOrEqualTo(Integer value) {
+            addCriterion("is_delete >=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThan(Integer value) {
+            addCriterion("is_delete <", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThanOrEqualTo(Integer value) {
+            addCriterion("is_delete <=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIn(List<Integer> values) {
+            addCriterion("is_delete in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotIn(List<Integer> values) {
+            addCriterion("is_delete not in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete not between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 101 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalNode.java

@@ -0,0 +1,101 @@
+package com.usky.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 审批_审批节点
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OaApprovalNode implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 流程ID
+     */
+    private Integer flowId;
+
+    /**
+     * 节点名称
+     */
+    private String nodeName;
+
+    /**
+     * 上级节点
+     */
+    private Integer parentId;
+
+    /**
+     * 审批人ID
+     */
+    private Integer approvalUserId;
+
+    /**
+     * 审批部门ID
+     */
+    private Integer approvalDeptId;
+
+    /**
+     * 审批职位ID
+     */
+    private Integer jobId;
+
+    /**
+     * 审批方式  0:按指定人审批 1:按部门审批  2: 按职位审批
+     */
+    private String isByDept;
+
+    /**
+     * 业务系统ID
+     */
+    private Integer customerId;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 871 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalNodeExample.java

@@ -0,0 +1,871 @@
+package com.usky.oa.domain;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class OaApprovalNodeExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public OaApprovalNodeExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIsNull() {
+            addCriterion("flow_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIsNotNull() {
+            addCriterion("flow_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdEqualTo(Integer value) {
+            addCriterion("flow_id =", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotEqualTo(Integer value) {
+            addCriterion("flow_id <>", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdGreaterThan(Integer value) {
+            addCriterion("flow_id >", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("flow_id >=", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdLessThan(Integer value) {
+            addCriterion("flow_id <", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdLessThanOrEqualTo(Integer value) {
+            addCriterion("flow_id <=", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIn(List<Integer> values) {
+            addCriterion("flow_id in", values, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotIn(List<Integer> values) {
+            addCriterion("flow_id not in", values, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdBetween(Integer value1, Integer value2) {
+            addCriterion("flow_id between", value1, value2, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("flow_id not between", value1, value2, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameIsNull() {
+            addCriterion("node_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameIsNotNull() {
+            addCriterion("node_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameEqualTo(String value) {
+            addCriterion("node_name =", value, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameNotEqualTo(String value) {
+            addCriterion("node_name <>", value, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameGreaterThan(String value) {
+            addCriterion("node_name >", value, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameGreaterThanOrEqualTo(String value) {
+            addCriterion("node_name >=", value, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameLessThan(String value) {
+            addCriterion("node_name <", value, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameLessThanOrEqualTo(String value) {
+            addCriterion("node_name <=", value, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameLike(String value) {
+            addCriterion("node_name like", value, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameNotLike(String value) {
+            addCriterion("node_name not like", value, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameIn(List<String> values) {
+            addCriterion("node_name in", values, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameNotIn(List<String> values) {
+            addCriterion("node_name not in", values, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameBetween(String value1, String value2) {
+            addCriterion("node_name between", value1, value2, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeNameNotBetween(String value1, String value2) {
+            addCriterion("node_name not between", value1, value2, "nodeName");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdIsNull() {
+            addCriterion("parent_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdIsNotNull() {
+            addCriterion("parent_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdEqualTo(Integer value) {
+            addCriterion("parent_id =", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdNotEqualTo(Integer value) {
+            addCriterion("parent_id <>", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdGreaterThan(Integer value) {
+            addCriterion("parent_id >", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("parent_id >=", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdLessThan(Integer value) {
+            addCriterion("parent_id <", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdLessThanOrEqualTo(Integer value) {
+            addCriterion("parent_id <=", value, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdIn(List<Integer> values) {
+            addCriterion("parent_id in", values, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdNotIn(List<Integer> values) {
+            addCriterion("parent_id not in", values, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdBetween(Integer value1, Integer value2) {
+            addCriterion("parent_id between", value1, value2, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andParentIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("parent_id not between", value1, value2, "parentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidIsNull() {
+            addCriterion("approval_uid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidIsNotNull() {
+            addCriterion("approval_uid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidEqualTo(Integer value) {
+            addCriterion("approval_uid =", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidNotEqualTo(Integer value) {
+            addCriterion("approval_uid <>", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidGreaterThan(Integer value) {
+            addCriterion("approval_uid >", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidGreaterThanOrEqualTo(Integer value) {
+            addCriterion("approval_uid >=", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidLessThan(Integer value) {
+            addCriterion("approval_uid <", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidLessThanOrEqualTo(Integer value) {
+            addCriterion("approval_uid <=", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidIn(List<Integer> values) {
+            addCriterion("approval_uid in", values, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidNotIn(List<Integer> values) {
+            addCriterion("approval_uid not in", values, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidBetween(Integer value1, Integer value2) {
+            addCriterion("approval_uid between", value1, value2, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidNotBetween(Integer value1, Integer value2) {
+            addCriterion("approval_uid not between", value1, value2, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdIsNull() {
+            addCriterion("dept_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdIsNotNull() {
+            addCriterion("dept_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdEqualTo(Integer value) {
+            addCriterion("dept_id =", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdNotEqualTo(Integer value) {
+            addCriterion("dept_id <>", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdGreaterThan(Integer value) {
+            addCriterion("dept_id >", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("dept_id >=", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdLessThan(Integer value) {
+            addCriterion("dept_id <", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdLessThanOrEqualTo(Integer value) {
+            addCriterion("dept_id <=", value, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdIn(List<Integer> values) {
+            addCriterion("dept_id in", values, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdNotIn(List<Integer> values) {
+            addCriterion("dept_id not in", values, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdBetween(Integer value1, Integer value2) {
+            addCriterion("dept_id between", value1, value2, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDeptIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("dept_id not between", value1, value2, "deptId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdIsNull() {
+            addCriterion("job_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdIsNotNull() {
+            addCriterion("job_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdEqualTo(Integer value) {
+            addCriterion("job_id =", value, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdNotEqualTo(Integer value) {
+            addCriterion("job_id <>", value, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdGreaterThan(Integer value) {
+            addCriterion("job_id >", value, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("job_id >=", value, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdLessThan(Integer value) {
+            addCriterion("job_id <", value, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdLessThanOrEqualTo(Integer value) {
+            addCriterion("job_id <=", value, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdIn(List<Integer> values) {
+            addCriterion("job_id in", values, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdNotIn(List<Integer> values) {
+            addCriterion("job_id not in", values, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdBetween(Integer value1, Integer value2) {
+            addCriterion("job_id between", value1, value2, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andJobIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("job_id not between", value1, value2, "jobId");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptIsNull() {
+            addCriterion("is_by_dept is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptIsNotNull() {
+            addCriterion("is_by_dept is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptEqualTo(Integer value) {
+            addCriterion("is_by_dept =", value, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptNotEqualTo(Integer value) {
+            addCriterion("is_by_dept <>", value, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptGreaterThan(Integer value) {
+            addCriterion("is_by_dept >", value, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptGreaterThanOrEqualTo(Integer value) {
+            addCriterion("is_by_dept >=", value, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptLessThan(Integer value) {
+            addCriterion("is_by_dept <", value, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptLessThanOrEqualTo(Integer value) {
+            addCriterion("is_by_dept <=", value, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptIn(List<Integer> values) {
+            addCriterion("is_by_dept in", values, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptNotIn(List<Integer> values) {
+            addCriterion("is_by_dept not in", values, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptBetween(Integer value1, Integer value2) {
+            addCriterion("is_by_dept between", value1, value2, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsByDeptNotBetween(Integer value1, Integer value2) {
+            addCriterion("is_by_dept not between", value1, value2, "isByDept");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNull() {
+            addCriterion("customer_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNotNull() {
+            addCriterion("customer_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdEqualTo(Integer value) {
+            addCriterion("customer_id =", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotEqualTo(Integer value) {
+            addCriterion("customer_id <>", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThan(Integer value) {
+            addCriterion("customer_id >", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("customer_id >=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThan(Integer value) {
+            addCriterion("customer_id <", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThanOrEqualTo(Integer value) {
+            addCriterion("customer_id <=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIn(List<Integer> values) {
+            addCriterion("customer_id in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotIn(List<Integer> values) {
+            addCriterion("customer_id not in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id not between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 106 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalRecord.java

@@ -0,0 +1,106 @@
+package com.usky.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 审批_审批记录表
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OaApprovalRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 单据类型 QJD:请假单  JBD:加班单  RZD:入职单 XJD:销假单  DTD:单位调动单 KTD:跨单位调动单
+     */
+    private String docType;
+
+    /**
+     * 单据ID
+     */
+    private Integer docId;
+
+    /**
+     * 流程ID
+     */
+    private Integer flowId;
+
+    /**
+     * 审批节点ID
+     */
+    private Integer nodeId;
+
+    /**
+     * 审批人ID
+     */
+    private Integer approvalUserId;
+
+    /**
+     * 审批状态  F:审批中 G:审批通过 H:审批不通过
+     */
+    private String status;
+
+    /**
+     * 审批意见
+     */
+    private String opinion;
+
+    /**
+     * 提交日期
+     */
+    private LocalDateTime submitDate;
+
+    /**
+     * 审批时间
+     */
+    private LocalDateTime approvalDate;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 1011 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApprovalRecordExample.java

@@ -0,0 +1,1011 @@
+package com.usky.oa.domain;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class OaApprovalRecordExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public OaApprovalRecordExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIsNull() {
+            addCriterion("doc_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIsNotNull() {
+            addCriterion("doc_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeEqualTo(String value) {
+            addCriterion("doc_type =", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotEqualTo(String value) {
+            addCriterion("doc_type <>", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeGreaterThan(String value) {
+            addCriterion("doc_type >", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeGreaterThanOrEqualTo(String value) {
+            addCriterion("doc_type >=", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLessThan(String value) {
+            addCriterion("doc_type <", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLessThanOrEqualTo(String value) {
+            addCriterion("doc_type <=", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeLike(String value) {
+            addCriterion("doc_type like", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotLike(String value) {
+            addCriterion("doc_type not like", value, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeIn(List<String> values) {
+            addCriterion("doc_type in", values, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotIn(List<String> values) {
+            addCriterion("doc_type not in", values, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeBetween(String value1, String value2) {
+            addCriterion("doc_type between", value1, value2, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocTypeNotBetween(String value1, String value2) {
+            addCriterion("doc_type not between", value1, value2, "docType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdIsNull() {
+            addCriterion("doc_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdIsNotNull() {
+            addCriterion("doc_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdEqualTo(Integer value) {
+            addCriterion("doc_id =", value, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdNotEqualTo(Integer value) {
+            addCriterion("doc_id <>", value, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdGreaterThan(Integer value) {
+            addCriterion("doc_id >", value, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("doc_id >=", value, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdLessThan(Integer value) {
+            addCriterion("doc_id <", value, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdLessThanOrEqualTo(Integer value) {
+            addCriterion("doc_id <=", value, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdIn(List<Integer> values) {
+            addCriterion("doc_id in", values, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdNotIn(List<Integer> values) {
+            addCriterion("doc_id not in", values, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdBetween(Integer value1, Integer value2) {
+            addCriterion("doc_id between", value1, value2, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDocIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("doc_id not between", value1, value2, "docId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIsNull() {
+            addCriterion("flow_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIsNotNull() {
+            addCriterion("flow_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdEqualTo(Integer value) {
+            addCriterion("flow_id =", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotEqualTo(Integer value) {
+            addCriterion("flow_id <>", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdGreaterThan(Integer value) {
+            addCriterion("flow_id >", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("flow_id >=", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdLessThan(Integer value) {
+            addCriterion("flow_id <", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdLessThanOrEqualTo(Integer value) {
+            addCriterion("flow_id <=", value, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdIn(List<Integer> values) {
+            addCriterion("flow_id in", values, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotIn(List<Integer> values) {
+            addCriterion("flow_id not in", values, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdBetween(Integer value1, Integer value2) {
+            addCriterion("flow_id between", value1, value2, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFlowIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("flow_id not between", value1, value2, "flowId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdIsNull() {
+            addCriterion("node_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdIsNotNull() {
+            addCriterion("node_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdEqualTo(Integer value) {
+            addCriterion("node_id =", value, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdNotEqualTo(Integer value) {
+            addCriterion("node_id <>", value, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdGreaterThan(Integer value) {
+            addCriterion("node_id >", value, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("node_id >=", value, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdLessThan(Integer value) {
+            addCriterion("node_id <", value, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdLessThanOrEqualTo(Integer value) {
+            addCriterion("node_id <=", value, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdIn(List<Integer> values) {
+            addCriterion("node_id in", values, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdNotIn(List<Integer> values) {
+            addCriterion("node_id not in", values, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdBetween(Integer value1, Integer value2) {
+            addCriterion("node_id between", value1, value2, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNodeIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("node_id not between", value1, value2, "nodeId");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidIsNull() {
+            addCriterion("approval_uid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidIsNotNull() {
+            addCriterion("approval_uid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidEqualTo(Integer value) {
+            addCriterion("approval_uid =", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidNotEqualTo(Integer value) {
+            addCriterion("approval_uid <>", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidGreaterThan(Integer value) {
+            addCriterion("approval_uid >", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidGreaterThanOrEqualTo(Integer value) {
+            addCriterion("approval_uid >=", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidLessThan(Integer value) {
+            addCriterion("approval_uid <", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidLessThanOrEqualTo(Integer value) {
+            addCriterion("approval_uid <=", value, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidIn(List<Integer> values) {
+            addCriterion("approval_uid in", values, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidNotIn(List<Integer> values) {
+            addCriterion("approval_uid not in", values, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidBetween(Integer value1, Integer value2) {
+            addCriterion("approval_uid between", value1, value2, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalUidNotBetween(Integer value1, Integer value2) {
+            addCriterion("approval_uid not between", value1, value2, "approvalUid");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(String value) {
+            addCriterion("status =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(String value) {
+            addCriterion("status <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(String value) {
+            addCriterion("status >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(String value) {
+            addCriterion("status >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(String value) {
+            addCriterion("status <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(String value) {
+            addCriterion("status <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLike(String value) {
+            addCriterion("status like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotLike(String value) {
+            addCriterion("status not like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<String> values) {
+            addCriterion("status in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<String> values) {
+            addCriterion("status not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(String value1, String value2) {
+            addCriterion("status between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(String value1, String value2) {
+            addCriterion("status not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionIsNull() {
+            addCriterion("opinion is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionIsNotNull() {
+            addCriterion("opinion is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionEqualTo(String value) {
+            addCriterion("opinion =", value, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionNotEqualTo(String value) {
+            addCriterion("opinion <>", value, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionGreaterThan(String value) {
+            addCriterion("opinion >", value, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionGreaterThanOrEqualTo(String value) {
+            addCriterion("opinion >=", value, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionLessThan(String value) {
+            addCriterion("opinion <", value, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionLessThanOrEqualTo(String value) {
+            addCriterion("opinion <=", value, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionLike(String value) {
+            addCriterion("opinion like", value, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionNotLike(String value) {
+            addCriterion("opinion not like", value, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionIn(List<String> values) {
+            addCriterion("opinion in", values, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionNotIn(List<String> values) {
+            addCriterion("opinion not in", values, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionBetween(String value1, String value2) {
+            addCriterion("opinion between", value1, value2, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpinionNotBetween(String value1, String value2) {
+            addCriterion("opinion not between", value1, value2, "opinion");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateIsNull() {
+            addCriterion("submit_date is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateIsNotNull() {
+            addCriterion("submit_date is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateEqualTo(Date value) {
+            addCriterion("submit_date =", value, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateNotEqualTo(Date value) {
+            addCriterion("submit_date <>", value, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateGreaterThan(Date value) {
+            addCriterion("submit_date >", value, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateGreaterThanOrEqualTo(Date value) {
+            addCriterion("submit_date >=", value, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateLessThan(Date value) {
+            addCriterion("submit_date <", value, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateLessThanOrEqualTo(Date value) {
+            addCriterion("submit_date <=", value, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateIn(List<Date> values) {
+            addCriterion("submit_date in", values, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateNotIn(List<Date> values) {
+            addCriterion("submit_date not in", values, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateBetween(Date value1, Date value2) {
+            addCriterion("submit_date between", value1, value2, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSubmitDateNotBetween(Date value1, Date value2) {
+            addCriterion("submit_date not between", value1, value2, "submitDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateIsNull() {
+            addCriterion("approval_date is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateIsNotNull() {
+            addCriterion("approval_date is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateEqualTo(Date value) {
+            addCriterion("approval_date =", value, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateNotEqualTo(Date value) {
+            addCriterion("approval_date <>", value, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateGreaterThan(Date value) {
+            addCriterion("approval_date >", value, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateGreaterThanOrEqualTo(Date value) {
+            addCriterion("approval_date >=", value, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateLessThan(Date value) {
+            addCriterion("approval_date <", value, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateLessThanOrEqualTo(Date value) {
+            addCriterion("approval_date <=", value, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateIn(List<Date> values) {
+            addCriterion("approval_date in", values, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateNotIn(List<Date> values) {
+            addCriterion("approval_date not in", values, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateBetween(Date value1, Date value2) {
+            addCriterion("approval_date between", value1, value2, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andApprovalDateNotBetween(Date value1, Date value2) {
+            addCriterion("approval_date not between", value1, value2, "approvalDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNull() {
+            addCriterion("customer_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIsNotNull() {
+            addCriterion("customer_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdEqualTo(Integer value) {
+            addCriterion("customer_id =", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotEqualTo(Integer value) {
+            addCriterion("customer_id <>", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThan(Integer value) {
+            addCriterion("customer_id >", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("customer_id >=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThan(Integer value) {
+            addCriterion("customer_id <", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdLessThanOrEqualTo(Integer value) {
+            addCriterion("customer_id <=", value, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdIn(List<Integer> values) {
+            addCriterion("customer_id in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotIn(List<Integer> values) {
+            addCriterion("customer_id not in", values, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCustomerIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("customer_id not between", value1, value2, "customerId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 18 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalAccountMapper.java

@@ -0,0 +1,18 @@
+package com.usky.oa.mapper;
+
+import com.usky.oa.domain.OaApprovalAccount;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 审批_账号权限 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Repository
+public interface OaApprovalAccountMapper extends CrudMapper<OaApprovalAccount> {
+
+}

+ 18 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalDocumentMapper.java

@@ -0,0 +1,18 @@
+package com.usky.oa.mapper;
+
+import com.usky.oa.domain.OaApprovalDocument;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 审批_申请单表 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Repository
+public interface OaApprovalDocumentMapper extends CrudMapper<OaApprovalDocument> {
+
+}

+ 18 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalFlowMapper.java

@@ -0,0 +1,18 @@
+package com.usky.oa.mapper;
+
+import com.usky.oa.domain.OaApprovalFlow;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 审批_审批流程 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Repository
+public interface OaApprovalFlowMapper extends CrudMapper<OaApprovalFlow> {
+
+}

+ 18 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalNodeMapper.java

@@ -0,0 +1,18 @@
+package com.usky.oa.mapper;
+
+import com.usky.oa.domain.OaApprovalNode;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 审批_审批节点 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Repository
+public interface OaApprovalNodeMapper extends CrudMapper<OaApprovalNode> {
+
+}

+ 16 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalRecordMapper.java

@@ -0,0 +1,16 @@
+package com.usky.oa.mapper;
+
+import com.usky.oa.domain.OaApprovalRecord;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 审批_审批记录表 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+public interface OaApprovalRecordMapper extends CrudMapper<OaApprovalRecord> {
+
+}

+ 43 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalAccountService.java

@@ -0,0 +1,43 @@
+package com.usky.oa.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.oa.domain.OaApprovalAccount;
+import com.usky.common.mybatis.core.CrudService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 审批_账号权限 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+public interface OaApprovalAccountService extends CrudService<OaApprovalAccount> {
+
+    /**
+     * 审批设置节点列表
+     *
+     * @param
+     * @return
+     */
+    CommonPage<OaApprovalAccount> list(Integer authType, Integer userId, String docType, Integer pageNum, Integer pageSize);
+
+    /**
+     * 节点保存
+     * @param
+     * @return
+     */
+    boolean update(List<OaApprovalAccount> approvalAccountList,Integer customerId);
+
+
+    /**
+     * 查询组织结构人员上限
+     * @param
+     * @return
+     */
+    List<Map<String,Integer>> findAvailableNum(List<Integer> orgIds);
+
+}

+ 53 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalCoreService.java

@@ -0,0 +1,53 @@
+package com.usky.oa.service;
+
+import com.smartsanitation.common.pagination.PaginationWrapper;
+import com.smartsanitation.common.response.ResultWrapper;
+import com.tidecloud.sanitation.gateway.vo.ApprovalNodeVo;
+import com.tidecloud.sanitation.gateway.vo.ApprovalRecordReponseVo;
+import com.tidecloud.sanitation.gateway.vo.OwnerApprovalReponse;
+import com.tidecloud.sanitation.gateway.vo.OwnerApprovalRequest;
+import com.usky.common.core.bean.ApiResult;
+
+import java.util.List;
+
+/**
+ * @Description: 审批流转
+ * @Author: guoenzhou
+ * @Date:   2020-09-08
+ * @Version: V1.0
+ */
+public interface OaApprovalCoreService {
+
+    /**
+     * 单据审批
+     * 页面点击同意或者不同意处理按钮
+     */
+    ResultWrapper<?> doApproval(String opinion, String status, Integer approvalId,Integer userId);
+
+    /**
+     * 单据提交
+     * 调用此方法进入审批
+     */
+    ApiResult<?> submitDocument(Integer docId, Integer flowId, Long userId);
+
+    /**
+     * 审批历史记录
+     */
+    List<ApprovalRecordReponseVo> approvalHistory(Integer docId, Integer flowId);
+
+    /**
+     * 单据审批链
+     */
+    List<ApprovalNodeVo> getApprovalNodes(Integer flowId,Integer docId);
+
+    /**
+     * 我待审记录
+     */
+    PaginationWrapper<OwnerApprovalReponse> findOwnerApproval(OwnerApprovalRequest ownerApprovalRequest, Integer approvalUid);
+
+    /**
+     * 撤销订单
+     * @return
+     */
+    boolean resetDoc(Integer docId,String userName);
+}

+ 19 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalDocumentService.java

@@ -0,0 +1,19 @@
+package com.usky.oa.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.oa.domain.OaApprovalDocument;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 审批_申请单表 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+public interface OaApprovalDocumentService extends CrudService<OaApprovalDocument> {
+    // 分页
+    CommonPage<OaApprovalDocument> page(String docType, String status, String docNo, Integer pageNum, Integer pageSize);
+}

+ 29 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalFlowService.java

@@ -0,0 +1,29 @@
+package com.usky.oa.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.oa.domain.OaApprovalFlow;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.oa.service.vo.OaApprovalFlowRequestVo;
+import com.usky.oa.service.vo.OaApprovalNodeVo;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 审批_审批流程 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+public interface OaApprovalFlowService extends CrudService<OaApprovalFlow> {
+
+    CommonPage<OaApprovalFlow> page(String docType, Integer pageNum, Integer pageSize);
+
+    Boolean save(OaApprovalFlowRequestVo flowRequestVo);
+
+    boolean edit(OaApprovalFlowRequestVo approvalFlowVo);
+
+    List<OaApprovalNodeVo> getFlowNodes(Integer flowId);
+}

+ 16 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalNodeService.java

@@ -0,0 +1,16 @@
+package com.usky.oa.service;
+
+import com.usky.oa.domain.OaApprovalNode;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 审批_审批节点 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+public interface OaApprovalNodeService extends CrudService<OaApprovalNode> {
+
+}

+ 16 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalRecordService.java

@@ -0,0 +1,16 @@
+package com.usky.oa.service;
+
+import com.usky.oa.domain.OaApprovalRecord;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 审批_审批记录表 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+public interface OaApprovalRecordService extends CrudService<OaApprovalRecord> {
+
+}

+ 143 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalAccountServiceImpl.java

@@ -0,0 +1,143 @@
+package com.usky.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.oa.domain.OaApprovalAccount;
+import com.usky.oa.mapper.OaApprovalAccountMapper;
+import com.usky.oa.mapper.OaApprovalFlowMapper;
+import com.usky.oa.mapper.OaApprovalNodeMapper;
+import com.usky.oa.service.OaApprovalAccountService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * <p>
+ * 审批_账号权限 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Service
+public class OaApprovalAccountServiceImpl extends AbstractCrudService<OaApprovalAccountMapper, OaApprovalAccount> implements OaApprovalAccountService {
+    @Autowired
+    private OaApprovalAccountMapper approvalAccountMapper;
+
+    @Autowired
+    private OaApprovalNodeMapper approvalNodeMapper;
+
+    @Autowired
+    private OaApprovalFlowMapper approvalFlowMapper;
+
+    @Autowired
+    private GatewayInterfaceDao gatewayInterfaceDao;
+
+
+    /**
+     * 查询审批账号权限列表
+     *
+     * @param authType 权限类型
+     * @param userId   用户id
+     * @param docType  单据类型
+     * @return
+     */
+    @Override
+    public CommonPage<OaApprovalAccount> list(Integer authType, Integer userId, String docType, Integer pageNum, Integer pageSize) {
+        Integer tenantId = SecurityUtils.getTenantId();
+        LambdaQueryWrapper<OaApprovalAccount> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(OaApprovalAccount::getTenantId, tenantId);
+        queryWrapper.eq(authType != null, OaApprovalAccount::getAuthType, authType);
+        queryWrapper.eq(userId != null, OaApprovalAccount::getUserId, userId);
+        queryWrapper.eq(StringUtils.isNotBlank(docType), OaApprovalAccount::getDocType, docType);
+        Page<OaApprovalAccount> oaApprovalAccountPage = approvalAccountMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
+        List<OaApprovalAccount> records = oaApprovalAccountPage.getRecords();
+        long total = oaApprovalAccountPage.getTotal();
+        return new CommonPage<>(records, total, pageNum, pageSize);
+    }
+
+    @Override
+    public boolean update(List<OaApprovalAccount> approvalAccountList, Integer customerId) {
+
+        // 查询变更删除信息 TODO
+       /* Integer userId = approvalAccountList.get(0).getUserId();
+        ApprovalAccountExample approvalAccountExample = new ApprovalAccountExample();
+        approvalAccountExample.createCriteria().andUserIdEqualTo(userId).andAuthTypeEqualTo(2);
+        List<ApprovalAccount> resultList = approvalAccountMapper.selectByExample(approvalAccountExample);
+
+
+        Map<Integer,ApprovalAccount> approvalAccountMap = approvalAccountList.stream().collect(Collectors.toMap(ApprovalAccount::getId, value -> value));
+
+        resultList.stream().map(approvalAccount -> {
+               if(!approvalAccountMap.containsKey(approvalAccount.getId())){
+                   Integer userId = approvalAccount.getUserId();
+                   String docType = approvalAccount.getDocType();
+                   //查询该用户在该类型下是否有审批节点,如果有执行撤销机制
+                   OaApprovalNodeExample approvalNodeExample = new OaApprovalNodeExample();
+                   approvalNodeExample.createCriteria().andApprovalUidEqualTo(userId);
+                   List<ApprovalNode> approvalNode = approvalNodeMapper.selectByExample(approvalNodeExample);
+                   List<Integer> flowList = approvalNode.stream().map(ApprovalNode::getFlowId).distinct().collect(Collectors.toList());
+
+                   ApprovalFlowExample approvalFlowExample = new ApprovalFlowExample();
+                   approvalFlowExample.createCriteria().andIdIn(flowList);
+                   List<ApprovalFlow> approvalFlows = approvalFlowMapper.selectByExample(approvalFlowExample);
+                   List<ApprovalFlow> approvalFlows1 = approvalFlows.stream().filter(approvalFlow -> approvalFlow.getDocType().equals(docType)).collect(Collectors.toList());
+
+
+               }
+
+        });*/
+
+//                Map<Integer, WorkShiftPeriodSnapshot> collect =
+//                workShiftPeriodSnapshots.stream().collect(Collectors.toMap(WorkShiftPeriodSnapshot::getId, value -> value));
+
+
+        // 操作,先删后加
+        if (approvalAccountList.size() > 0) {
+            Integer userId = approvalAccountList.get(0).getUserId();
+            ApprovalAccountExample approvalAccountExample = new ApprovalAccountExample();
+            approvalAccountExample.createCriteria().andUserIdEqualTo(userId);
+            approvalAccountMapper.deleteByExample(approvalAccountExample);
+
+            for (OaApprovalAccount approvalAccount : approvalAccountList) {
+                approvalAccount.setTenantId(customerId);
+                approvalAccountMapper.insertSelective(approvalAccount);
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     *
+     * @param orgIds
+     * @return
+     */
+    public List<Map<String, Integer>> findAvailableNum(List<Integer> orgIds) {
+        List<Map<String, Integer>> resultList = new ArrayList<>();
+        for (Integer orgId : orgIds) {
+            Map<String, Integer> result = new HashMap<>();
+            // 查询当前组织结构上限人数
+            Integer limitNum = gatewayInterfaceDao.selectCountByEmployee(orgId);
+            Integer availableNum = null;
+            if (null != limitNum && limitNum > 0) {
+                // 查询当前组织结构在线职员人数
+                Integer currentNum = gatewayInterfaceDao.selectCurrentNumByEmployee(orgId);
+                // 上限人数-在职人数=可用人数
+                availableNum = limitNum - currentNum;
+            }
+            result.put("orgId", orgId);
+            result.put("limitNum", limitNum);
+            result.put("availableNum", availableNum);
+            resultList.add(result);
+        }
+        return resultList;
+    }
+
+}

+ 355 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalCoreServiceImpl.java

@@ -0,0 +1,355 @@
+package com.usky.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.smartsanitation.common.pagination.PaginationWrapper;
+import com.smartsanitation.common.response.ResultWrapper;
+import com.tidecloud.sanitation.gateway.constant.OaApprovalConstant;
+import com.tidecloud.sanitation.gateway.dao.ApprovalDocumentMapper;
+import com.tidecloud.sanitation.gateway.dao.ApprovalNodeMapper;
+import com.tidecloud.sanitation.gateway.dao.OaApprovalRecordMapper;
+import com.tidecloud.sanitation.gateway.dao.ext.GatewayInterfaceDao;
+import com.tidecloud.sanitation.gateway.model.entity.*;
+import com.tidecloud.sanitation.gateway.service.ApprovalCoreService;
+import com.tidecloud.sanitation.gateway.vo.*;
+import com.usky.common.core.bean.ApiResult;
+import com.usky.oa.constant.OaApprovalConstant;
+import com.usky.oa.domain.OaApprovalDocument;
+import com.usky.oa.domain.OaApprovalNode;
+import com.usky.oa.domain.OaApprovalNodeExample;
+import com.usky.oa.domain.OaApprovalRecord;
+import com.usky.oa.domain.OaApprovalRecord;
+import com.usky.oa.mapper.OaApprovalDocumentMapper;
+import com.usky.oa.mapper.OaApprovalNodeMapper;
+import com.usky.oa.mapper.OaApprovalRecordMapper;
+import com.usky.oa.service.OaApprovalCoreService;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ *
+ *
+ * @description: 审批流转
+ * @author: enzhouguo
+ * @Date: 2020-09-08
+ * @Version: V1.0
+ */
+@Service
+public class OaApprovalCoreServiceImpl implements OaApprovalCoreService {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ApprovalCoreServiceImpl.class);
+
+    @Autowired
+    private OaApprovalRecordMapper approvalRecordMapper;
+
+    @Autowired
+    private OaApprovalDocumentMapper approvalDocumentMapper;
+
+    @Autowired
+    private OaApprovalNodeMapper approvalNodeMapper;
+
+    @Autowired
+    private GatewayInterfaceDao gatewayInterfaceDao;
+
+
+    /**
+     * 单据审批
+     * 页面点击同意或者不同意处理按钮
+     * @param opinion
+     * @param status
+     * @param approvalId
+     * @return
+     */
+    public ResultWrapper<?> doApproval(String opinion, String status, Integer approvalId, Integer userId) {
+        // 修改审批记录
+        try {
+            LOGGER.info("userId: " + userId + "的" + approvalId + "审批操作开始");
+            LambdaQueryWrapper<OaApprovalRecord> approvalRecordLambdaQueryWrapper = Wrappers.lambdaQuery();
+            approvalRecordLambdaQueryWrapper.eq(OaApprovalRecord::getId,approvalId);
+            OaApprovalRecord approvalRecord = approvalRecordMapper.selectOne(approvalRecordLambdaQueryWrapper);
+
+            // approvalRecordService.getOaApprovalRecordById(approvalId)
+            // 验证是否审批人审批
+//            if(userId != approvalRecord.getApprovalUid()){
+//                LOGGER.warn("该节点审批人ID:{},实际审批人:{}");
+//                return ResultWrapper.fail(4001,"审批操作失败,你不能审批该节点 ");
+//            }
+
+            if (approvalRecord.getStatus().equals(OaApprovalConstant.APPROVAL_STATUS_F)) {
+                approvalRecord.setOpinion(opinion);
+                approvalRecord.setStatus(status);
+                approvalRecord.setApprovalDate(LocalDateTime.now());
+                approvalRecordMapper.updateById(approvalRecord);// 修改审批记录
+                // 查询审批记录
+                Integer nodeId = approvalRecord.getNodeId();
+                if (status.equals(OaApprovalConstant.APPROVAL_STATUS_G)) {// 审批通过
+                    LambdaQueryWrapper<OaApprovalNode> approvalNodeLambdaQueryWrapper = Wrappers.lambdaQuery();
+                    approvalNodeLambdaQueryWrapper.eq(OaApprovalNode::getParentId, nodeId);
+                    Integer nextNodeCount = approvalNodeMapper.selectCount(approvalNodeLambdaQueryWrapper);
+                    if (nextNodeCount > 0) {// 有下
+                        // 生成下一个审批节点
+                        boolean bln = generateNextNode(approvalRecord.getDocId(), approvalRecord.getFlowId(), nodeId);
+                    } else {
+                        // 修改单据状态
+                        OaApprovalDocument document = approvalDocumentMapper.selectByPrimaryKey(approvalRecord.getDocId());// approvalRecord.
+                        document.setStatus(OaApprovalConstant.APPROVAL_STATUS_G);
+                        approvalDocumentMapper.updateByPrimaryKey(document);
+                    }
+
+                } else if (status.equals(OaApprovalConstant.APPROVAL_STATUS_H)) {// 审批不通过
+                    OaApprovalDocument document = approvalDocumentMapper.selectByPrimaryKey(approvalRecord.getDocId());// approvalRecord.
+                    document.setStatus(OaApprovalConstant.APPROVAL_STATUS_H);
+                    approvalDocumentMapper.updateByPrimaryKey(document);
+                }
+            } else {
+                LOGGER.error("该审批节点已审批");
+                return ResultWrapper.fail(4001, "审批操作失败,该审批节点已审批");
+            }
+
+        } catch (Exception exception) {
+            LOGGER.error("审批操作失败", exception);
+            return ResultWrapper.fail(4001, "审批操作失败,请重试");
+        }
+        return ResultWrapper.ok("操作成功");
+    }
+
+    /**
+     * 生成下一个审批节点
+     * @param
+     * @return
+     */
+    private boolean generateNextNode(Integer docId, Integer flowId, Integer parentId) {
+        // 根据doc_id查询单据内容
+        LambdaQueryWrapper<OaApprovalDocument> documentLambdaQueryWrapper = Wrappers.lambdaQuery();
+        documentLambdaQueryWrapper.eq(OaApprovalDocument::getId, docId);
+        OaApprovalDocument document = approvalDocumentMapper.selectOne(documentLambdaQueryWrapper);
+        // 根据流程ID寻找第一个审批节点
+        LambdaQueryWrapper<OaApprovalNode> nodeLambdaQueryWrapper = Wrappers.lambdaQuery();
+        nodeLambdaQueryWrapper.eq(OaApprovalNode::getFlowId, flowId)
+                .eq(OaApprovalNode::getParentId, parentId);
+        OaApprovalNode firstNode = approvalNodeMapper.selectList(nodeLambdaQueryWrapper).get(0);
+
+        String isByDept = firstNode.getIsByDept();
+        Integer approvalUid = null;
+        if (StringUtils.isEmpty(isByDept) || "0".equals(isByDept)) {// 按指定人审批
+            approvalUid = firstNode.getApprovalUserId();
+        } else if ("1".equals(isByDept)) {// 按部门归属审批
+            // TODO 后续考虑实现
+        } else if ("2".equals(isByDept)) {// 按照部门职位审批
+            // TODO 后续考虑实现
+        }
+
+        OaApprovalRecord approvalRecord = new OaApprovalRecord();
+        approvalRecord.setFlowId(flowId);
+        approvalRecord.setDocId(docId);
+        approvalRecord.setNodeId(firstNode.getId());
+        approvalRecord.setDocType(document.getDocType());
+        approvalRecord.setStatus(OaApprovalConstant.APPROVAL_STATUS_F);// 审批中
+        approvalRecord.setApprovalUserId(approvalUid);
+        approvalRecord.setSubmitDate(document.getSubmitTime());
+        approvalRecord.setTenantId(document.getCustomerId());
+        boolean bln = approvalRecordMapper.insert(approvalRecord) > 0 ? true : false;
+        return bln;
+    }
+
+    /**
+     *
+     * 单据提交
+     * 调用此方法进入审批
+     */
+    public ApiResult<?> submitDocument(Integer docId, Integer flowId, Long userId) {
+        // 验证单据是否本人提交
+        LambdaQueryWrapper<OaApprovalDocument> documentLambdaQueryWrapper = Wrappers.lambdaQuery();
+        documentLambdaQueryWrapper.eq(OaApprovalDocument::getId,docId);
+        OaApprovalDocument document = approvalDocumentMapper.selectOne(documentLambdaQueryWrapper);
+//        if(document.getProposer() != userId){
+//            return ResultWrapper.fail(4001,"申请单只能申请人本人提交");
+//        }
+
+        // 生成第一个审批节点
+        boolean bln = generateNextNode(docId, flowId, 0);
+        if (bln) {
+            // 修改单据状态为审批中
+            document.setStatus(OaApprovalConstant.APPROVAL_STATUS_F);
+            document.setUpdateTime(LocalDateTime.now());
+            approvalDocumentMapper.updateById(document);
+        }
+        if (bln) {
+            LOGGER.info("单据[{}]提交审批流成功", document.getDocNo());
+            return ApiResult.success("单据[" + document.getDocNo() + "]提交审批流成功");
+        } else {
+            LOGGER.info("单据[{}]提交审批流失败", document.getDocNo());
+            return ApiResult.error(String.valueOf(4001), "单据提交审批流失败");
+        }
+    }
+
+
+    /**
+     * 审批历史记录
+     */
+    public List<OaApprovalRecordReponseVo> approvalHistory(Integer docId, Integer flowId) {
+//        OaApprovalNodeExample approvalNodeExample = new OaApprovalNodeExample();
+//        approvalNodeExample.createCriteria().andFlowIdEqualTo(flowId);
+//        List<ApprovalNode> approvalNodeList = approvalNodeMapper.selectByExample(approvalNodeExample);
+//        Map<Integer,ApprovalNode> approvalNodeMap = new HashMap<>();
+//        for (ApprovalNode approvalNode: approvalNodeList) {
+//            approvalNodeMap.put(approvalNode.getId(),approvalNode);
+//        }
+//        OaApprovalRecordExample approvalRecordExample = new OaApprovalRecordExample();
+//        approvalRecordExample.createCriteria().andDocIdEqualTo(docId);
+//        List<OaApprovalRecord> result = approvalRecordMapper.selectByExample(approvalRecordExample);
+//
+//        List<OaApprovalRecordReponseVo> approvalRecordReponseVoList = new ArrayList<>();
+//        for (OaApprovalRecord approvalRecord: result) {
+//            ApprovalNode approvalNode = approvalNodeMap.get(approvalRecord.getNodeId());
+//            OaApprovalRecordReponseVo approvalRecordReponseVo = new OaApprovalRecordReponseVo();
+//            BeanUtils.copyProperties(approvalRecord,approvalRecordReponseVo);
+//            approvalRecordReponseVo.setApprovalName("审批人"+approvalRecord.getApprovalUid());
+//            approvalRecordReponseVo.setNodeName(approvalNode.getNodeName());
+//            approvalRecordReponseVoList.add(approvalRecordReponseVo);
+//        }
+        List<OaApprovalRecordReponseVo> approvalRecordReponseVoList = gatewayInterfaceDao.selectOaApprovalRecord(docId);
+
+        return approvalRecordReponseVoList;
+    }
+
+
+    /**
+     * 单据审批链
+     */
+    public List<ApprovalNodeVo> getApprovalNodes(Integer flowId, Integer docId) {
+//        OaApprovalRecordExample approvalRecordExample = new OaApprovalRecordExample();
+//        approvalRecordExample.createCriteria().andDocIdEqualTo(docId);
+//        List<OaApprovalRecord> result =approvalRecordMapper.selectByExample(approvalRecordExample);
+//        Map<Integer,OaApprovalRecord> approvalRecordMap = new HashMap<>();
+//        for (OaApprovalRecord approvalRecord: result) {
+//            approvalRecordMap.put(approvalRecord.getNodeId(),approvalRecord);
+//        }
+//        OaApprovalNodeExample approvalNodeExample = new OaApprovalNodeExample();
+//        approvalNodeExample.createCriteria().andFlowIdEqualTo(flowId);
+//        List<ApprovalNode> approvalNodeList = approvalNodeMapper.selectByExample(approvalNodeExample);
+//
+//        List<ApprovalNodeVo> approvalNodeVoList = new ArrayList<>();
+//        for (ApprovalNode approvalNode:approvalNodeList) {
+//            ApprovalNodeVo approvalNodeVo = new ApprovalNodeVo();
+//            BeanUtils.copyProperties(approvalNode,approvalNodeVo);
+//            OaApprovalRecord approvalRecord = approvalRecordMap.get(approvalNode.getId());
+//            if(null != approvalRecord) {
+//                approvalNodeVo.setApprovalName("审批人" + approvalRecord.getApprovalUid());
+//                approvalNodeVo.setStatus(approvalRecord.getStatus());
+//                if (approvalNodeVo.getStatus().equals(OaApprovalConstant.APPROVAL_STATUS_F)) {
+//                    approvalNodeVo.setIsApproval(1);
+//                }
+//            }
+//            approvalNodeVoList.add(approvalNodeVo);
+//        }
+        List<ApprovalNodeVo> approvalNodeVoList = gatewayInterfaceDao.selectApprovalNodes(flowId, docId);
+
+        return approvalNodeVoList;
+    }
+
+
+    /**
+     * 我待审列表
+     * @param ownerApprovalRequest
+     * @param approvalUid
+     * @return
+     */
+    public PaginationWrapper<OwnerApprovalReponse> findOwnerApproval(OwnerApprovalRequest ownerApprovalRequest, Integer approvalUid) {
+
+        PaginationWrapper<OwnerApprovalReponse> paginationWrapper = new PaginationWrapper<>();
+        Integer page = ownerApprovalRequest.getPageNo();
+        Integer pageSize = ownerApprovalRequest.getPageSize();
+        paginationWrapper.setPage(page);
+        paginationWrapper.setPageSize(pageSize);
+
+        // 通过uid查找我的审批记录
+//        OaApprovalRecordExample approvalRecordExample = new OaApprovalRecordExample();
+//        OaApprovalRecordExample.Criteria approvalRecordCriteria = approvalRecordExample.createCriteria();
+//        if(null != approvalUid){
+//            approvalRecordCriteria.andApprovalUidEqualTo(approvalUid);
+//        }
+//        if(null != ownerApprovalRequest.getStatus()) {
+//            approvalRecordCriteria.andStatusEqualTo(ownerApprovalRequest.getStatus());
+//        }
+//        List<OaApprovalRecord> result  = approvalRecordMapper.selectByExample(approvalRecordExample);
+//        List<Integer> docIds = result.stream().map(OaApprovalRecord::getDocId).collect(Collectors.toList());
+//        Map<Integer,OaApprovalRecord> approvalRecordMap = result.stream().collect(Collectors.toMap(OaApprovalRecord::getDocId,value -> value));
+//        for (OaApprovalRecord approvalRecord :result){
+//            Integer docId = approvalRecord.getDocId();
+//            docIds.add(docId);
+//            approvalRecordMap.put(docId,approvalRecord);
+//        }
+        // 通过ApprovalUid
+//        if(docIds.size() > 0) {
+//            OaApprovalDocumentExample approvalDocumentExample = new OaApprovalDocumentExample();
+//            OaApprovalDocumentExample.Criteria criteria = approvalDocumentExample.createCriteria();
+//            approvalDocumentExample.setOrderByClause(" status,create_time desc");
+//            criteria.andIdIn(docIds);
+//            if (null != ownerApprovalRequest.getDocType()) {
+//                criteria.andDocTypeEqualTo(ownerApprovalRequest.getDocType());
+//            }
+//            if (null != ownerApprovalRequest.getDocNo()) {
+//                criteria.andDocNoEqualTo(ownerApprovalRequest.getDocNo());
+//            }
+//            if( null != ownerApprovalRequest.getDeptId() && ownerApprovalRequest.getDeptId() != 0) {
+//                criteria.andDeptIdEqualTo(ownerApprovalRequest.getDeptId());
+//            }
+//            PageHelper.startPage(page, pageSize);
+//            Page<OaApprovalDocument> approvalDocumentPage = (Page<OaApprovalDocument>)approvalDocumentMapper.selectByExample(approvalDocumentExample);
+//            List<OwnerApprovalReponse>  ownerApprovalReponsesList = new ArrayList<>();
+//            for (OaApprovalDocument document: approvalDocumentPage.getResult()) {
+//                OaApprovalRecord approvalRecord = approvalRecordMap.get(document.getId());
+//                OwnerApprovalReponse ownerApprovalReponse = new OwnerApprovalReponse();
+//                BeanUtils.copyProperties(document, ownerApprovalReponse);
+//                ownerApprovalReponse.setApprovalId(approvalRecord.getId());
+//                ownerApprovalReponsesList.add(ownerApprovalReponse);
+//            }
+        PageHelper.startPage(page, pageSize);
+        OwnerApprovalVo ownerApprovalVo = new OwnerApprovalVo();
+        BeanUtils.copyProperties(ownerApprovalRequest, ownerApprovalVo);
+        ownerApprovalVo.setApprovalUid(approvalUid);
+        Page<OwnerApprovalReponse> approvalDocumentPage = (Page<OwnerApprovalReponse>) gatewayInterfaceDao.selectOwnerOaApprovalDocument(ownerApprovalVo);
+        paginationWrapper.setTotalCount((int) approvalDocumentPage.getTotal());
+        paginationWrapper.setData(approvalDocumentPage.getResult());
+
+        return paginationWrapper;
+//        }
+//        return null;
+    }
+
+    /**
+     * 撤销申请单
+     * @param docId
+     * @return
+     */
+    @Transactional
+    public boolean resetDoc(Integer docId, String userName) {
+        // 修改单据状态为审批中
+        OaApprovalDocument document = approvalDocumentMapper.selectByPrimaryKey(docId);// approvalRecord.
+        document.setStatus(OaApprovalConstant.APPROVAL_STATUS_I);
+        approvalDocumentMapper.updateByPrimaryKeySelective(document);
+
+        // 修改审批流程节点,审批中的记录都要删掉或置为撤销
+        OaApprovalRecordExample approvalRecordExample = new OaApprovalRecordExample();
+        approvalRecordExample.createCriteria().andDocIdEqualTo(docId).andStatusEqualTo("F");
+        OaApprovalRecord approvalRecord = new OaApprovalRecord();
+        approvalRecord.setStatus(OaApprovalConstant.APPROVAL_STATUS_I);
+        approvalRecord.setOpinion("系统消息:" + userName + "手动撤销单据");
+        approvalRecordMapper.updateByExampleSelective(approvalRecord, approvalRecordExample);
+        return true;
+    }
+
+}

+ 64 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalDocumentServiceImpl.java

@@ -0,0 +1,64 @@
+package com.usky.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.oa.domain.OaApprovalDocument;
+import com.usky.oa.mapper.OaApprovalDocumentMapper;
+import com.usky.oa.service.OaApprovalDocumentService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ * 审批_申请单表 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Service
+public class OaApprovalDocumentServiceImpl extends AbstractCrudService<OaApprovalDocumentMapper, OaApprovalDocument> implements OaApprovalDocumentService {
+
+    @Autowired
+    private OaApprovalDocumentMapper oaApprovalDocumentMapper;
+
+    @Override
+    public CommonPage<OaApprovalDocument> page(String docType, String status, String docNo, Integer pageNum, Integer pageSize) {
+        // 创建分页对象
+        Page<OaApprovalDocument> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<OaApprovalDocument> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper
+                .eq(StringUtils.isNotBlank(docType), OaApprovalDocument::getDocType, docType)
+                .eq(StringUtils.isNotBlank(status), OaApprovalDocument::getStatus, status)
+                .eq(StringUtils.isNotBlank(docNo), OaApprovalDocument::getDocNo, docNo)
+                .orderByDesc(OaApprovalDocument::getId);
+
+        // 执行分页查询
+        IPage<OaApprovalDocument> resultPage = oaApprovalDocumentMapper.selectPage(page, queryWrapper);
+
+        // 如果查询结果为空,直接返回空的CommonPage对象
+        if (resultPage.getRecords().isEmpty()) {
+            return new CommonPage<>(Collections.emptyList(), 0, pageSize, pageNum);
+        }
+
+        // 创建返回的分页对象
+        CommonPage<OaApprovalDocument> returnPage = new CommonPage<>(
+                resultPage.getRecords(),
+                resultPage.getTotal(),
+                pageSize,
+                pageNum
+        );
+
+        return returnPage;
+    }
+
+}

+ 222 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalFlowServiceImpl.java

@@ -0,0 +1,222 @@
+package com.usky.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.utils.bean.BeanUtils;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.oa.domain.OaApprovalDocument;
+import com.usky.oa.domain.OaApprovalFlow;
+import com.usky.oa.domain.OaApprovalNode;
+import com.usky.oa.domain.OaApprovalRecord;
+import com.usky.oa.mapper.*;
+import com.usky.oa.service.OaApprovalAccountService;
+import com.usky.oa.service.OaApprovalFlowService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.oa.service.vo.OaApprovalFlowRequestVo;
+import com.usky.oa.service.vo.OaApprovalNodeVo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ * 审批_审批流程 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Service
+public class OaApprovalFlowServiceImpl extends AbstractCrudService<OaApprovalFlowMapper, OaApprovalFlow> implements OaApprovalFlowService {
+    @Autowired
+    private OaApprovalFlowMapper approvalFlowMapper;
+    @Autowired
+    private OaApprovalNodeMapper approvalNodeMapper;
+    @Autowired
+    private OaApprovalDocumentMapper approvalDocumentMapper;
+    @Autowired
+    private OaApprovalRecordMapper approvalRecordMapper;
+
+    @Override
+    public CommonPage<OaApprovalFlow> page(String docType, Integer pageNum, Integer pageSize) {
+        LambdaQueryWrapper<OaApprovalFlow> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(StringUtils.isNotBlank(docType), OaApprovalFlow::getDocType, docType)
+                .orderByDesc(OaApprovalFlow::getId);
+        Page<OaApprovalFlow> oaApprovalFlowPage = approvalFlowMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
+        List<OaApprovalFlow> records = oaApprovalFlowPage.getRecords();
+        long total = oaApprovalFlowPage.getTotal();
+        CommonPage<OaApprovalFlow> oaApprovalFlowCommonPage = new CommonPage<>(records, total, pageNum, pageSize);
+        return oaApprovalFlowCommonPage;
+    }
+
+    @Override
+    public Boolean save(OaApprovalFlowRequestVo flowRequestVo) {
+        OaApprovalFlow approvalFlow = new OaApprovalFlow();
+        BeanUtils.copyProperties(flowRequestVo,approvalFlow);
+        approvalFlow.setCreateTime(LocalDateTime.now());
+        approvalFlow.setTenantId(SecurityUtils.getTenantId());
+        approvalFlowMapper.insert(approvalFlow);
+        Integer flowId = approvalFlow.getId();
+
+        List<OaApprovalNodeVo> approvalNodeVos = flowRequestVo.getNodes();
+        if(approvalNodeVos!= null && !approvalNodeVos.isEmpty()){
+            int parentId = 0;
+            for (OaApprovalNodeVo approvalNodeVo : approvalNodeVos) {
+                OaApprovalNode approvalNode = new OaApprovalNode();
+                BeanUtils.copyProperties(approvalNodeVo,approvalNode);
+                approvalNode.setCustomerId(flowRequestVo.getCustomerId());
+                approvalNode.setFlowId(flowId);
+                approvalNode.setParentId(parentId);
+                approvalNodeMapper.insert(approvalNode);
+                parentId = approvalNode.getId();
+            }
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional
+    public boolean edit(OaApprovalFlowRequestVo approvalFlowVo) {
+        String username = SecurityUtils.getUsername();
+        Integer tenantId = SecurityUtils.getTenantId();
+        approvalFlowVo.setUpdateBy(username);
+        approvalFlowVo.setCustomerId(tenantId);
+
+        //可以分两种情况做,一种是流程已经被单据引用 逻辑删除创建新的版本  一种是流程未被引用可以
+        Integer flowId = null;
+        if(findCountByFlowId(approvalFlowVo.getId()) > 0) {
+            //step1:逻辑删除流程和流程节点
+            OaApprovalFlow approvalFlow = new OaApprovalFlow();
+            approvalFlow.setId(approvalFlowVo.getId());
+            approvalFlow.setUpdateBy(approvalFlowVo.getUpdateBy());
+            approvalFlow.setIsDelete(1);
+            approvalFlowMapper.updateById(approvalFlow);
+
+
+            //step2:添加新版本的流程节点
+            OaApprovalFlow approvalFlow1 = new OaApprovalFlow();
+            BeanUtils.copyProperties(approvalFlowVo, approvalFlow1);
+            approvalFlow1.setCreateBy(approvalFlowVo.getUpdateBy());
+            approvalFlowMapper.insert(approvalFlow1);
+            flowId = approvalFlow1.getId();
+
+            List<OaApprovalNodeVo> approvalNodeVos = approvalFlowVo.getNodes();
+            if (approvalNodeVos != null && approvalNodeVos.size() > 0) {
+                int parentId = 0;
+                for (OaApprovalNodeVo approvalNodeVo : approvalNodeVos) {
+                    OaApprovalNode approvalNode = new OaApprovalNode();
+                    BeanUtils.copyProperties(approvalNodeVo, approvalNode);
+                    approvalNode.setCustomerId(approvalFlowVo.getCustomerId());
+                    approvalNode.setFlowId(flowId);
+                    approvalNode.setParentId(parentId);
+                    approvalNode.setId(null);
+                    approvalNodeMapper.insert(approvalNode);
+                    parentId = approvalNode.getId();
+                }
+            }
+
+            //step3:流程中单据变更并且更新流程ID //撤销所有流程中的单据
+            /******begin 需求变更:流程变更重新重新生成单据********/
+            LambdaQueryWrapper<OaApprovalDocument> criteria = Wrappers.lambdaQuery();
+            criteria.eq(OaApprovalDocument::getCustomerId, approvalFlowVo.getId())
+                            .in(OaApprovalDocument::getStatus, Arrays.asList("F","I"));
+            OaApprovalDocument approvalDocument = new OaApprovalDocument();
+            approvalDocument.setStatus("I");
+            approvalDocument.setFlowId(flowId);
+            approvalDocumentMapper.update(approvalDocument, criteria);
+            /****end****/
+//            OaApprovalDocumentExample approvalDocumentExample = new OaApprovalDocumentExample();
+//            OaApprovalDocumentExample.Criteria criteria = approvalDocumentExample.createCriteria();
+//            criteria.andFlowIdEqualTo(approvalFlowVo.getId());
+//            criteria.andStatusIn(Arrays.asList(OaApprovalConstant.APPROVAL_STATUS_F,OaApprovalConstant.APPROVAL_STATUS_I));//审批流程,审批中和撤销单据都要调整为新流程ID
+//            List<OaApprovalDocument> documentList = approvalDocumentMapper.selectByExample(approvalDocumentExample);
+//            for (OaApprovalDocument approvalDocument:documentList) {
+//                //先撤销旧单据
+//                approvalDocument.setStatus(OaApprovalConstant.APPROVAL_STATUS_I);
+//                approvalDocumentMapper.updateByPrimaryKeySelective(approvalDocument);
+//                //再复制增加新单据
+//                approvalDocument.setStatus(OaApprovalConstant.APPROVAL_STATUS_E);
+//                approvalDocument.setFlowId(flowId);
+//                approvalDocument.setId(null);
+//                approvalDocument.setDocNo(approvalDocument.getDocType()+"-"+DateUtil.formate(new Date(),"yyMMddHHmmss"));
+//                approvalDocumentMapper.insertSelective(approvalDocument);
+//            }
+            /********/
+
+            //step4:修改审批流程节点,审批中的记录都要删掉或置为撤销
+            LambdaQueryWrapper<OaApprovalRecord> recordQuery = Wrappers.lambdaQuery();
+            recordQuery.eq(OaApprovalRecord::getFlowId,approvalFlowVo.getId()).eq(OaApprovalRecord::getStatus,"F");
+
+            OaApprovalRecord approvalRecord = new OaApprovalRecord();
+            approvalRecord.setStatus("I");
+            approvalRecord.setOpinion("系统消息:审批节点调整,单据撤销");
+            approvalRecordMapper.update(approvalRecord,recordQuery);
+
+
+
+        } else {
+            //流程未被用处理方法
+            OaApprovalFlow approvalFlow1 = new OaApprovalFlow();
+            BeanUtils.copyProperties(approvalFlowVo, approvalFlow1);
+            approvalFlow1.setCreateUser(approvalFlowVo.getUpdateUser());
+            approvalFlowMapper.updateByPrimaryKeySelective(approvalFlow1);
+
+            //根据流程ID删除节点
+            OaApprovalNodeExample approvalNodeExample = new OaApprovalNodeExample();
+            approvalNodeExample.createCriteria().andFlowIdEqualTo(approvalFlowVo.getId());
+            approvalNodeMapper.deleteByExample(approvalNodeExample);
+
+            //重新添加节点
+            List<ApprovalNodeVo> approvalNodeVos = approvalFlowVo.getNodes();
+            if (approvalNodeVos != null && approvalNodeVos.size() > 0) {
+                int parentId = 0;
+                for (ApprovalNodeVo approvalNodeVo : approvalNodeVos) {
+                    ApprovalNode approvalNode = new ApprovalNode();
+                    BeanUtils.copyProperties(approvalNodeVo, approvalNode);
+                    approvalNode.setCustomerId(approvalFlowVo.getCustomerId());
+                    approvalNode.setFlowId(approvalFlowVo.getId());
+                    approvalNode.setParentId(parentId);
+                    approvalNode.setId(null);
+                    approvalNodeMapper.insertSelective(approvalNode);
+                    parentId = approvalNode.getId();
+                }
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    public List<OaApprovalNodeVo> getFlowNodes(Integer flowId) {
+        OaApprovalNodeExample approvalNodeExample = new OaApprovalNodeExample();
+        approvalNodeExample.createCriteria().andFlowIdEqualTo(flowId);
+        List<ApprovalNode> approvalNodeList = approvalNodeMapper.selectByExample(approvalNodeExample);
+
+        List<ApprovalNodeVo> approvalNodeVoList = new ArrayList<>();
+        for (ApprovalNode approvalNode:approvalNodeList) {
+            ApprovalNodeVo approvalNodeVo = new ApprovalNodeVo();
+            BeanUtils.copyProperties(approvalNode,approvalNodeVo);
+            approvalNodeVoList.add(approvalNodeVo);
+        }
+
+        return approvalNodeVoList;
+    }
+
+    private  long findCountByFlowId(Integer flowId) {
+        OaApprovalDocumentExample approvalDocumentExample = new OaApprovalDocumentExample();
+        OaApprovalDocumentExample.Criteria criteria = approvalDocumentExample.createCriteria();
+        criteria.andFlowIdEqualTo(flowId);
+        return  approvalDocumentMapper.countByExample(approvalDocumentExample);
+    }
+
+
+}

+ 20 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalNodeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.oa.service.impl;
+
+import com.usky.oa.domain.OaApprovalNode;
+import com.usky.oa.mapper.OaApprovalNodeMapper;
+import com.usky.oa.service.OaApprovalNodeService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 审批_审批节点 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Service
+public class OaApprovalNodeServiceImpl extends AbstractCrudService<OaApprovalNodeMapper, OaApprovalNode> implements OaApprovalNodeService {
+
+}

+ 20 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalRecordServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.oa.service.impl;
+
+import com.usky.oa.domain.OaApprovalRecord;
+import com.usky.oa.mapper.OaApprovalRecordMapper;
+import com.usky.oa.service.OaApprovalRecordService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 审批_审批记录表 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-09-30
+ */
+@Service
+public class OaApprovalRecordServiceImpl extends AbstractCrudService<OaApprovalRecordMapper, OaApprovalRecord> implements OaApprovalRecordService {
+
+}

+ 32 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/vo/OaApprovalFlowRequestVo.java

@@ -0,0 +1,32 @@
+package com.usky.oa.service.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ *
+ * @author fu
+ * @date 2024/10/10
+ */
+@Data
+public class OaApprovalFlowRequestVo {
+    private Integer id;
+
+    @ApiModelProperty(value = "流程名称")
+    private String flowName;
+
+    private String docType;
+
+    private String createBy;
+
+    private String updateBy;
+
+
+    private String description;
+
+    private Integer customerId;
+
+    private List<OaApprovalNodeVo> nodes;
+}

+ 35 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/vo/OaApprovalNodeVo.java

@@ -0,0 +1,35 @@
+package com.usky.oa.service.vo;
+
+import lombok.Data;
+
+/**
+ *
+ * @author fu
+ * @date 2024/10/10
+ */
+@Data
+public class OaApprovalNodeVo {
+    private Integer id;
+
+    private Integer flowId;
+
+    private String nodeName;
+
+    private Integer parentId;
+
+    private Integer approvalUid;
+
+    private Integer deptId;
+
+    private Integer jobId;
+
+    private Integer isByDept;
+
+    private Integer customerId;
+
+    private Integer isApproval = 0;
+
+    private String status;
+
+    private String approvalName;
+}

+ 21 - 0
service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalAccountMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.oa.mapper.OaApprovalAccountMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.oa.domain.OaApprovalAccount">
+        <id column="id" property="id" />
+        <result column="auth_type" property="authType" />
+        <result column="doc_type" property="docType" />
+        <result column="flow_id" property="flowId" />
+        <result column="user_id" property="userId" />
+        <result column="user_name" property="userName" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 27 - 0
service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalDocumentMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.oa.mapper.OaApprovalDocumentMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.oa.domain.OaApprovalDocument">
+        <id column="id" property="id" />
+        <result column="doc_no" property="docNo" />
+        <result column="doc_type" property="docType" />
+        <result column="proposer" property="proposer" />
+        <result column="reason" property="reason" />
+        <result column="doc_data" property="docData" />
+        <result column="submit_time" property="submitTime" />
+        <result column="status" property="status" />
+        <result column="flow_id" property="flowId" />
+        <result column="creator" property="creator" />
+        <result column="customer_id" property="customerId" />
+        <result column="event_status" property="eventStatus" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 21 - 0
service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalFlowMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.oa.mapper.OaApprovalFlowMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.oa.domain.OaApprovalFlow">
+        <id column="id" property="id" />
+        <result column="flow_name" property="flowName" />
+        <result column="doc_type" property="docType" />
+        <result column="description" property="description" />
+        <result column="customer_id" property="customerId" />
+        <result column="is_delete" property="isDelete" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 24 - 0
service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalNodeMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.oa.mapper.OaApprovalNodeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.oa.domain.OaApprovalNode">
+        <id column="id" property="id" />
+        <result column="flow_id" property="flowId" />
+        <result column="node_name" property="nodeName" />
+        <result column="parent_id" property="parentId" />
+        <result column="approval_user_id" property="approvalUserId" />
+        <result column="approval_dept_id" property="approvalDeptId" />
+        <result column="job_id" property="jobId" />
+        <result column="is_by_dept" property="isByDept" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+        <result column="customer_id" property="customerId" />
+    </resultMap>
+
+</mapper>

+ 25 - 0
service-oa/service-oa-biz/src/main/resources/mapper/oa/OaApprovalRecordMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.oa.mapper.OaApprovalRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.oa.domain.OaApprovalRecord">
+        <id column="id" property="id" />
+        <result column="doc_type" property="docType" />
+        <result column="doc_id" property="docId" />
+        <result column="flow_id" property="flowId" />
+        <result column="node_id" property="nodeId" />
+        <result column="approval_user_id" property="approvalUserId" />
+        <result column="status" property="status" />
+        <result column="opinion" property="opinion" />
+        <result column="submit_date" property="submitDate" />
+        <result column="approval_date" property="approvalDate" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>