From bdd967acce69d2420d9866789dfcee42c7e77023 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 19 九月 2025 14:10:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddMoneyDTO.java                              |   38 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java                      |   39 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContactDTO.java                            |   22 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeListVO.java                              |   31 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeListVO.java                             |   31 
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java                 |    8 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java                           |   39 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java                                |   29 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java                       |   30 
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java           |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java     |  128 ++
 ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java                  |   15 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java                       |   31 
 ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml                        |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java                             |   50 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java                              |   41 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java          |  380 ++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BackListVO.java                                |   31 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowListVO.java                              |   31 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java                            |   40 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java  |  524 +++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java                     |   35 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java                           |   46 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java                |    8 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java                           |   31 
 ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalFlowNodeEnum.java                   |   57 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java                  |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AuditDTO.java                                 |   21 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalFlowNodeListVO.java                    |   23 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java                           |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java              |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java                             |   41 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java      |   29 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddReimbursementDTO.java                      |   22 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java          |    8 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java                              |   44 
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java     |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java                     |   51 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java                               |   39 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java                           |   32 
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java                             |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java                             |   59 +
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java                          |   42 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContractDTO.java                           |   25 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabListVO.java                                |   34 
 /dev/null                                                                                     |  175 ---
 ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseListVO.java                            |   33 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java                            |   69 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java                            |   46 +
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java                         |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java       |   24 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java                      |   45 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java                          |   35 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddPaymentDTO.java                            |   29 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAdvertisementDTO.java                      |   47 +
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java        |    4 
 57 files changed, 2,524 insertions(+), 212 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
index a159ee5..4440d2e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
@@ -6,13 +6,27 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.entity.TDept;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.framework.web.service.TokenService;
-import com.ruoyi.system.dto.AddLeaveDTO;
-import com.ruoyi.system.dto.SetApprovalDTO;
+import com.ruoyi.system.dto.*;
+import com.ruoyi.system.emums.ApprovalFlowNodeEnum;
+import com.ruoyi.system.emums.ApprovalTypeEnum;
+import com.ruoyi.system.model.*;
 import com.ruoyi.system.model.OaApprovalApplications;
-import com.ruoyi.system.model.OaApprovalFlowNode;
-import com.ruoyi.system.service.*;
-import com.ruoyi.system.utils.ApprovalTypeEnum;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.OaApprovalApplicationAdvertisementService;
+import com.ruoyi.system.service.OaApprovalApplicationAttendanceService;
+import com.ruoyi.system.service.OaApprovalApplicationContactService;
+import com.ruoyi.system.service.OaApprovalApplicationContractService;
+import com.ruoyi.system.service.OaApprovalApplicationMoneyService;
+import com.ruoyi.system.service.OaApprovalApplicationPaymentService;
+import com.ruoyi.system.service.OaApprovalApplicationReimbursementItemService;
+import com.ruoyi.system.service.OaApprovalApplicationReimbursementService;
+import com.ruoyi.system.service.OaApprovalApplicationsService;
+import com.ruoyi.system.service.OaApprovalFlowNodeService;
+import com.ruoyi.system.service.OaApprovalService;
+import com.ruoyi.system.service.OaApprovalTodoService;
+import com.ruoyi.system.service.TDeptService;
 import com.ruoyi.system.utils.UUIDUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -22,11 +36,17 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import oshi.driver.mac.net.NetStat;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 import com.ruoyi.system.emums.ApprovalStatusEnum;
 import com.ruoyi.common.exception.ServiceException;
 
@@ -39,7 +59,7 @@
  * @since 2025-09-15
  */
 @RestController
-@Api("审批-发起审批")
+@Api(tags ="审批-发起审批")
 @RequestMapping("/oa-approval-applications")
 public class OaApprovalApplicationsController {
     @Resource
@@ -49,20 +69,38 @@
     @Resource
     private OaApprovalApplicationsService approvalApplicationsService;
     @Resource
+    private OaApprovalApplicationAdvertisementService approvalApplicationAdvertisementService;
+    @Resource
+    private OaApprovalApplicationContactService approvalApplicationContactService;
+    @Resource
+    private OaApprovalApplicationPaymentService approvalApplicationPaymentService;
+    @Resource
+    private OaApprovalApplicationContractService approvalApplicationContractService;
+    @Resource
+    private OaApprovalApplicationMoneyService approvalApplicationMoneyService;
+    @Resource
+    private OaApprovalApplicationReimbursementService approvalApplicationReimbursementService;
+    @Resource
+    private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService;
+    @Resource
+    private OaApprovalFlowNodeService approvalFlowNodeService;
+    @Resource
     private ISysUserService sysUserService;
     @Resource
     private OaApprovalApplicationAttendanceService approvalApplicationAttendanceService;
     @Resource
     private TDeptService deptService;
+    @Resource
+    private OaApprovalTodoService oaApprovalTodoService;
     @Log(title = "审批-发起请假", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起请假")
-    @PostMapping(value = "/setApproval")
-    public R setDept(@RequestBody AddLeaveDTO dto) {
+    @PostMapping(value = "/addLeave")
+    public R addLeave(@RequestBody AddLeaveDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
-        String code = "qj"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        String code = "Leave-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
         OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
         oaApprovalApplications.setApplicationCode(code);
-        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE_APPLICATION.getId());
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE.getCode());
         oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
         SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
         TDept dept = deptService.getById(sysUser.getDeptId());
@@ -73,8 +111,472 @@
         oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
         oaApprovalApplications.setApprovalStatus(1);
         oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
-//        oaApprovalApplications.setCurrentFlowNodeId();
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        List<Integer> approvalIds = approvalApplicationsService.lambdaQuery()
+                .in(OaApprovalApplications::getApprovalStatus, Arrays.asList(1,2))
+                .eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
+                .eq(OaApprovalApplications::getApplicantUserId, sysUser.getUserId()).list()
+                .stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
+        if (!approvalIds.isEmpty()){
+            // 根据请假时间 查询请假申请记录
+            List<OaApprovalApplicationAttendance> approvalApplicationAttendances = approvalApplicationAttendanceService.lambdaQuery()
+                    .in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
+                    .ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
+                    .le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
+                    .eq(OaApprovalApplicationAttendance::getIsLeave, 1).list();
+            if (!approvalApplicationAttendances.isEmpty()){
+                boolean hasOverlap = approvalApplicationAttendanceService.lambdaQuery()
+                        .eq(OaApprovalApplicationAttendance::getIsLeave, true)
+                        .in(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalIds)
+                        .apply("(start_time < {0} AND end_time > {1})", dto.getEndTime(), dto.getStartTime())
+                        .exists();
+
+                if (hasOverlap) {
+                    return R.fail("请假时间与已有请假记录重叠,请重新选择时间");
+                }
+            }
+        }
+
+
         approvalApplicationsService.save(oaApprovalApplications);
+        // 生成明细记录
+        OaApprovalApplicationAttendance oaApprovalApplicationAttendance = new OaApprovalApplicationAttendance();
+        oaApprovalApplicationAttendance.setApprovalApplicationId(oaApprovalApplications.getId());
+        oaApprovalApplicationAttendance.setStartTime(dto.getStartTime());
+        oaApprovalApplicationAttendance.setEndTime(dto.getEndTime());
+        oaApprovalApplicationAttendance.setDuration(dto.getDuration());
+        oaApprovalApplicationAttendance.setIsLeave(true);
+        approvalApplicationAttendanceService.save(oaApprovalApplicationAttendance);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
+        return R.ok();
+    }
+    @Log(title = "审批-发起外出申请", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "发起外出申请")
+    @PostMapping(value = "/addOut")
+    public R addOut(@RequestBody AddOutDTO dto) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String code = "Out-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
+        oaApprovalApplications.setApplicationCode(code);
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.OUT.getCode());
+        oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        TDept dept = deptService.getById(sysUser.getDeptId());
+        oaApprovalApplications.setApplicantName(sysUser.getNickName());
+        oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
+        oaApprovalApplications.setDeptName(dept.getDeptName());
+        oaApprovalApplications.setApplicationDate(LocalDate.now());
+        oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
+        oaApprovalApplications.setApprovalStatus(1);
+        oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.OUT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        List<Integer> approvalIds = approvalApplicationsService.lambdaQuery()
+                .in(OaApprovalApplications::getApprovalStatus, Arrays.asList(1,2))
+                .eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.OUT.getCode())
+                .eq(OaApprovalApplications::getApplicantUserId, sysUser.getUserId()).list()
+                .stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
+        if (!approvalIds.isEmpty()){
+            // 根据请假时间 查询请假申请记录
+            List<OaApprovalApplicationAttendance> approvalApplicationAttendances = approvalApplicationAttendanceService.lambdaQuery()
+                    .in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
+                    .ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
+                    .le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
+                    .list();
+            if (!approvalApplicationAttendances.isEmpty()){
+                boolean hasOverlap = approvalApplicationAttendanceService.lambdaQuery()
+                        .in(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalIds)
+                        .apply("(start_time < {0} AND end_time > {1})", dto.getEndTime(), dto.getStartTime())
+                        .exists();
+
+                if (hasOverlap) {
+                    return R.fail("外出时间与已有外出记录重叠,请重新选择时间");
+                }
+            }
+        }
+
+        approvalApplicationsService.save(oaApprovalApplications);
+        // 生成明细记录
+        OaApprovalApplicationAttendance oaApprovalApplicationAttendance = new OaApprovalApplicationAttendance();
+        oaApprovalApplicationAttendance.setApprovalApplicationId(oaApprovalApplications.getId());
+        oaApprovalApplicationAttendance.setStartTime(dto.getStartTime());
+        oaApprovalApplicationAttendance.setEndTime(dto.getEndTime());
+        oaApprovalApplicationAttendance.setDuration(dto.getDuration());
+        oaApprovalApplicationAttendance.setAddress(dto.getAddress());
+        approvalApplicationAttendanceService.save(oaApprovalApplicationAttendance);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
+        return R.ok();
+    }
+    @Log(title = "审批-发起出差申请", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "发起出差申请")
+    @PostMapping(value = "/addBusinessTrip")
+    public R addBusinessTrip(@RequestBody AddBusinessTripDTO dto) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String code = "BusinessTrip-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
+        oaApprovalApplications.setApplicationCode(code);
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.BUSINESS_TRIP.getCode());
+        oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        TDept dept = deptService.getById(sysUser.getDeptId());
+        oaApprovalApplications.setApplicantName(sysUser.getNickName());
+        oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
+        oaApprovalApplications.setDeptName(dept.getDeptName());
+        oaApprovalApplications.setApplicationDate(LocalDate.now());
+        oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
+        oaApprovalApplications.setApprovalStatus(1);
+        oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BUSINESS_TRIP.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        List<Integer> approvalIds = approvalApplicationsService.lambdaQuery()
+                .in(OaApprovalApplications::getApprovalStatus, Arrays.asList(1,2))
+                .eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.BUSINESS_TRIP.getCode())
+                .eq(OaApprovalApplications::getApplicantUserId, sysUser.getUserId()).list()
+                .stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
+        if (!approvalIds.isEmpty()){
+            // 根据请假时间 查询请假申请记录
+            List<OaApprovalApplicationAttendance> approvalApplicationAttendances = approvalApplicationAttendanceService.lambdaQuery()
+                    .in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
+                    .ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
+                    .le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
+                    .list();
+            if (!approvalApplicationAttendances.isEmpty()){
+                boolean hasOverlap = approvalApplicationAttendanceService.lambdaQuery()
+                        .in(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalIds)
+                        .apply("(start_time < {0} AND end_time > {1})", dto.getEndTime(), dto.getStartTime())
+                        .exists();
+
+                if (hasOverlap) {
+                    return R.fail("外出时间与已有外出记录重叠,请重新选择时间");
+                }
+            }
+        }
+        approvalApplicationsService.save(oaApprovalApplications);
+        // 生成明细记录
+        OaApprovalApplicationAttendance oaApprovalApplicationAttendance = new OaApprovalApplicationAttendance();
+        oaApprovalApplicationAttendance.setApprovalApplicationId(oaApprovalApplications.getId());
+        oaApprovalApplicationAttendance.setStartTime(dto.getStartTime());
+        oaApprovalApplicationAttendance.setEndTime(dto.getEndTime());
+        oaApprovalApplicationAttendance.setDuration(dto.getDuration());
+        oaApprovalApplicationAttendance.setAddress(dto.getAddress());
+        oaApprovalApplicationAttendance.setProjectName(dto.getProjectName());
+        approvalApplicationAttendanceService.save(oaApprovalApplicationAttendance);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
+        return R.ok();
+    }
+    @Log(title = "审批-发起销假申请", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "发起销假申请")
+    @PostMapping(value = "/addLeaveDestroy")
+    public R addLeaveDestroy(@RequestBody AddLeaveDestroyDTO dto) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String code = "LeaveDestroy-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
+        oaApprovalApplications.setApplicationCode(code);
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE_DESTROY.getCode());
+        oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        TDept dept = deptService.getById(sysUser.getDeptId());
+        oaApprovalApplications.setApplicantName(sysUser.getNickName());
+        oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
+        oaApprovalApplications.setDeptName(dept.getDeptName());
+        oaApprovalApplications.setApplicationDate(LocalDate.now());
+        oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
+        oaApprovalApplications.setApprovalStatus(1);
+        oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE_DESTROY.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        // 生成明细记录
+        OaApprovalApplicationAttendance oaApprovalApplicationAttendance = new OaApprovalApplicationAttendance();
+        oaApprovalApplicationAttendance.setStartTime(dto.getStartTime());
+        oaApprovalApplicationAttendance.setEndTime(dto.getEndTime());
+        oaApprovalApplicationAttendance.setDuration(dto.getDuration());
+        List<Integer> approvalIds = approvalApplicationsService.lambdaQuery()
+                .eq(OaApprovalApplications::getApprovalStatus, 2)
+                .eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
+                .eq(OaApprovalApplications::getApplicantUserId, sysUser.getUserId()).list()
+                .stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
+        if (approvalIds.isEmpty()){
+            return R.fail("销假失败,销假日期范围内未查询到请假申请");
+        }
+        // 根据请假时间 查询请假申请记录
+        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
+                .ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
+                .le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
+                .eq(OaApprovalApplicationAttendance::getIsLeave, 1)
+                .orderByDesc(OaApprovalApplicationAttendance::getId)
+                .last("limit 1").one();
+        if (approvalApplicationAttendance==null){
+            return R.fail("销假失败,销假日期范围内未查询到请假申请");
+        }
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalApplicationAttendance.getApprovalApplicationId());
+        if (approvalApplications.getApprovalStatus()!=2){
+            return R.fail("销假失败,请假申请未通过");
+        }
+        approvalApplicationsService.save(oaApprovalApplications);
+        oaApprovalApplicationAttendance.setApprovalApplicationId(oaApprovalApplications.getId());
+        oaApprovalApplicationAttendance.setLeaveApprovalApplicationId(approvalApplicationAttendance.getApprovalApplicationId());
+        approvalApplicationAttendanceService.save(oaApprovalApplicationAttendance);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
+        return R.ok();
+    }
+
+    @Log(title = "审批-发起报销申请", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "发起报销申请")
+    @PostMapping(value = "/addReimbursement")
+    public R addReimbursement(@RequestBody AddReimbursementDTO dto) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String code = "Reimbursement-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
+        oaApprovalApplications.setApplicationCode(code);
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.REIMBURSEMENT.getCode());
+        oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        TDept dept = deptService.getById(sysUser.getDeptId());
+        oaApprovalApplications.setApplicantName(sysUser.getNickName());
+        oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
+        oaApprovalApplications.setDeptName(dept.getDeptName());
+        oaApprovalApplications.setApplicationDate(LocalDate.now());
+        oaApprovalApplications.setApprovalStatus(1);
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.REIMBURSEMENT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        approvalApplicationsService.save(oaApprovalApplications);
+        OaApprovalApplicationReimbursement oaApprovalApplicationReimbursement = new OaApprovalApplicationReimbursement();
+        oaApprovalApplicationReimbursement.setApprovalApplicationId(oaApprovalApplications.getId());
+        oaApprovalApplicationReimbursement.setType(dto.getType());
+        approvalApplicationReimbursementService.save(oaApprovalApplicationReimbursement);
+        BigDecimal total = new BigDecimal(0);
+        List<OaApprovalApplicationReimbursementItem> oaApprovalApplicationReimbursementItems = new ArrayList<>();
+        for (OaApprovalApplicationReimbursementItem oaApprovalApplicationReimbursementItem : oaApprovalApplicationReimbursementItems) {
+            oaApprovalApplicationReimbursementItem.setApprovalApplicationId(oaApprovalApplicationReimbursement.getId());
+            total = total.add(oaApprovalApplicationReimbursementItem.getAmount());
+        }
+        oaApprovalApplicationReimbursement.setReimbursementAmount(total);
+        approvalApplicationReimbursementService.updateById(oaApprovalApplicationReimbursement);
+        approvalApplicationReimbursementItemService.saveBatch(oaApprovalApplicationReimbursementItems);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
+        return R.ok();
+    }
+    @Log(title = "审批-发起款项申请", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "发起款项申请")
+    @PostMapping(value = "/addMoney")
+    public R addMoney(@RequestBody AddMoneyDTO dto) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String code = "Money-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
+        oaApprovalApplications.setApplicationCode(code);
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.MONEY.getCode());
+        oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        TDept dept = deptService.getById(sysUser.getDeptId());
+        oaApprovalApplications.setApplicantName(sysUser.getNickName());
+        oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
+        oaApprovalApplications.setDeptName(dept.getDeptName());
+        oaApprovalApplications.setApplicationDate(LocalDate.now());
+        oaApprovalApplications.setApprovalStatus(1);
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.MONEY.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        approvalApplicationsService.save(oaApprovalApplications);
+        OaApprovalApplicationMoney oaApprovalApplicationMoney = new OaApprovalApplicationMoney();
+        BeanUtils.copyProperties(dto, oaApprovalApplicationMoney);
+        oaApprovalApplicationMoney.setApprovalApplicationId(oaApprovalApplications.getId());
+        approvalApplicationMoneyService.save(oaApprovalApplicationMoney);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
+        return R.ok();
+    }
+    @Log(title = "审批-发起合同文件申请", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "发起合同文件申请")
+    @PostMapping(value = "/addContract")
+    public R addContract(@RequestBody AddContractDTO dto) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String code = "Contract-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
+        oaApprovalApplications.setApplicationCode(code);
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.CONTRACT.getCode());
+        oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        TDept dept = deptService.getById(sysUser.getDeptId());
+        oaApprovalApplications.setApplicantName(sysUser.getNickName());
+        oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
+        oaApprovalApplications.setDeptName(dept.getDeptName());
+        oaApprovalApplications.setApplicationDate(LocalDate.now());
+        oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
+        oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
+        oaApprovalApplications.setApprovalStatus(1);
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTRACT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        approvalApplicationsService.save(oaApprovalApplications);
+
+        OaApprovalApplicationContract oaApprovalApplicationContract = new OaApprovalApplicationContract();
+        oaApprovalApplicationContract.setContractUrl(dto.getContractUrl());
+        oaApprovalApplicationContract.setApprovalApplicationId(oaApprovalApplications.getId());
+        approvalApplicationContractService.save(oaApprovalApplicationContract);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
+        return R.ok();
+    }
+    @Log(title = "审批-发起进度款支付申请", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "发起进度款支付申请")
+    @PostMapping(value = "/addPayment")
+    public R addPayment(@RequestBody AddPaymentDTO dto) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String code = "Payment-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
+        oaApprovalApplications.setApplicationCode(code);
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.PAYMENT.getCode());
+        oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        TDept dept = deptService.getById(sysUser.getDeptId());
+        oaApprovalApplications.setApplicantName(sysUser.getNickName());
+        oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
+        oaApprovalApplications.setDeptName(dept.getDeptName());
+        oaApprovalApplications.setApplicationDate(LocalDate.now());
+        oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
+        oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
+        oaApprovalApplications.setApprovalStatus(1);
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PAYMENT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        approvalApplicationsService.save(oaApprovalApplications);
+        OaApprovalApplicationPayment oaApprovalApplicationPayment = new OaApprovalApplicationPayment();
+        oaApprovalApplicationPayment.setApprovalApplicationId(oaApprovalApplications.getId());
+        oaApprovalApplicationPayment.setProjectId(dto.getProjectId());
+        oaApprovalApplicationPayment.setContractAmount(dto.getContractAmount());
+        oaApprovalApplicationPayment.setApplyAmount(dto.getApplyAmount());
+        approvalApplicationPaymentService.save(oaApprovalApplicationPayment);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
+        return R.ok();
+    }
+    @Log(title = "审批-发起内部联系单申请", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "发起内部联系单申请")
+    @PostMapping(value = "/addContact")
+    public R addContact(@RequestBody AddContactDTO dto) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String code = "Contact-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
+        oaApprovalApplications.setApplicationCode(code);
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.CONTACT.getCode());
+        oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        TDept dept = deptService.getById(sysUser.getDeptId());
+        oaApprovalApplications.setApplicantName(sysUser.getNickName());
+        oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
+        oaApprovalApplications.setDeptName(dept.getDeptName());
+        oaApprovalApplications.setApplicationDate(LocalDate.now());
+        oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
+        oaApprovalApplications.setApprovalStatus(1);
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTACT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        approvalApplicationsService.save(oaApprovalApplications);
+        OaApprovalApplicationContact oaApprovalApplicationContact = new OaApprovalApplicationContact();
+        oaApprovalApplicationContact.setApprovalApplicationId(oaApprovalApplications.getId());
+        oaApprovalApplicationContact.setDescription(dto.getDescription());
+        approvalApplicationContactService.save(oaApprovalApplicationContact);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
+        return R.ok();
+    }
+    @Log(title = "审批-发起广告制作申请", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "发起广告制作申请")
+    @PostMapping(value = "/addAdvertisement")
+    public R addAdvertisement(@RequestBody AddAdvertisementDTO dto) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String code = "Advertisement-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
+        oaApprovalApplications.setApplicationCode(code);
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.ADVERTISEMENT.getCode());
+        oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
+        SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
+        TDept dept = deptService.getById(sysUser.getDeptId());
+        oaApprovalApplications.setApplicantName(sysUser.getNickName());
+        oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
+        oaApprovalApplications.setDeptName(dept.getDeptName());
+        oaApprovalApplications.setApplicationDate(LocalDate.now());
+        oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
+        oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
+        oaApprovalApplications.setApprovalStatus(1);
+        OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ADVERTISEMENT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus,1)
+                .last("limit 1")
+                .one();
+        oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
+        approvalApplicationsService.save(oaApprovalApplications);
+        OaApprovalApplicationAdvertisement oaApprovalApplicationAdvertisement = new OaApprovalApplicationAdvertisement();
+        oaApprovalApplicationAdvertisement.setApprovalApplicationId(oaApprovalApplications.getId());
+        oaApprovalApplicationAdvertisement.setTitle(dto.getTitle());
+        oaApprovalApplicationAdvertisement.setContent(dto.getContent());
+        oaApprovalApplicationAdvertisement.setNumber(dto.getNumber());
+        oaApprovalApplicationAdvertisement.setTotalAmount(dto.getTotalAmount());
+        oaApprovalApplicationAdvertisement.setSpec(dto.getSpec());
+        oaApprovalApplicationAdvertisement.setStatus(false);
+        approvalApplicationAdvertisementService.save(oaApprovalApplicationAdvertisement);
+        // 根据节点类型 生成代办
+        oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
+                Integer.valueOf(sysUser.getDeptId()));
         return R.ok();
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java
index edec725..e6339f8 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java
@@ -34,7 +34,7 @@
  */
 @RestController
 @RequestMapping("/oa-approval")
-@Api("审批流程设计")
+@Api(tags ="审批流程设计")
 public class OaApprovalController {
     @Resource
     private OaApprovalService oaApprovalService;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java
index 3b25cff..f3df0be 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java
@@ -1,8 +1,26 @@
 package com.ruoyi.web.controller.api;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.dto.AddLeaveDTO;
+import com.ruoyi.system.dto.AuditDTO;
+import com.ruoyi.system.model.*;
+import com.ruoyi.system.service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * <p>
@@ -14,7 +32,117 @@
  */
 @RestController
 @RequestMapping("/oa-approval-flow-audit")
+@Api(tags = "通用审批接口")
 public class OaApprovalFlowAuditController {
+    @Resource
+    private OaApprovalTodoService approvalTodoService;
+    @Resource
+    private OaApprovalFlowAuditService approvalFlowAuditService;
+    @Resource
+    private OaApprovalApplicationStorageService approvalApplicationStorageService;
+    @Resource
+    private OaApprovalApplicationPurchaseService approvalApplicationPurchaseService;
+    @Resource
+    private OaApprovalApplicationAssetItemService approvalApplicationAssetItemService;
+    @Resource
+    private TokenService tokenService;
+    @Resource
+    private OaApprovalService approvalService;
 
+    @Resource
+    private OaApprovalApplicationsService approvalApplicationsService;
+    @Resource
+    private OaApprovalApplicationAdvertisementService approvalApplicationAdvertisementService;
+    @Resource
+    private OaApprovalApplicationContactService approvalApplicationContactService;
+    @Resource
+    private OaApprovalApplicationPaymentService approvalApplicationPaymentService;
+    @Resource
+    private OaApprovalApplicationContractService approvalApplicationContractService;
+    @Resource
+    private OaApprovalApplicationMoneyService approvalApplicationMoneyService;
+    @Resource
+    private AssetMainService assetMainService;
+    @Resource
+    private OaApprovalApplicationReimbursementService approvalApplicationReimbursementService;
+    @Resource
+    private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService;
+    @Resource
+    private OaApprovalFlowNodeService approvalFlowNodeService;
+    @Resource
+    private OaApprovalApplicationAssetService approvalApplicationAssetService;
+    @Resource
+    private ISysUserService sysUserService;
+    @Resource
+    private OaApprovalApplicationDisposeService approvalApplicationDisposeService;
+    @Resource
+    private OaApprovalApplicationChangeService approvalApplicationChangeService;
+    @Resource
+    private OaApprovalApplicationAttendanceService approvalApplicationAttendanceService;
+    @Resource
+    private TDeptService deptService;
+    @Resource
+    private OaApprovalTodoService oaApprovalTodoService;
+    @Resource
+    private OaApprovalFlowService approvalFlowService;
+
+
+
+    @Log(title = "审批-通用审批接口", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "通用审批接口")
+    @PostMapping(value = "/audit")
+    public R addLeave(@RequestBody AuditDTO dto) {
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(dto.getApprovalApplicationId());
+        Integer currentFlowNodeId = approvalApplications.getCurrentFlowNodeId();
+        Long userId = tokenService.getLoginUser().getUserId();
+        SysUser sysUser = sysUserService.selectUserById(userId);
+
+        OaApprovalTodo approvalTodo = approvalTodoService.lambdaQuery().eq(OaApprovalTodo::getUserId, userId)
+                .eq(OaApprovalTodo::getFlowNodeId, currentFlowNodeId)
+                .eq(OaApprovalTodo::getApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        approvalTodo.setStatus(1);
+        approvalTodo.setHandleTime(LocalDateTime.now());
+        approvalTodoService.updateById(approvalTodo);
+
+        OaApproval approval = approvalService.getById(approvalApplications.getApprovalId());
+        if (dto.getApprovalStatus()==0){
+            // 中断审批流程
+            approvalApplications.setApprovalStatus(3);
+            approvalApplicationsService.updateById(approvalApplications);
+            // 删除除当前审批人该申请单的未处理的所有待办
+            approvalTodoService.remove(new LambdaQueryWrapper<OaApprovalTodo>()
+                    .eq(OaApprovalTodo::getApplicationId, approvalApplications.getId())
+                    .eq(OaApprovalTodo::getStatus,0));
+        }
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(currentFlowNodeId);
+        OaApprovalFlowAudit approvalFlowAudit = new OaApprovalFlowAudit();
+        approvalFlowAudit.setApprovalApplicationId(approvalApplications.getId());
+        approvalFlowAudit.setFlowNodeId(approvalApplications.getCurrentFlowNodeId());
+        approvalFlowAudit.setFlowName(oaApprovalFlowNode.getFlowName());
+        approvalFlowAudit.setSortOrder(oaApprovalFlowNode.getSortOrder());
+        approvalFlowAudit.setUserId(userId.intValue());
+        approvalFlowAudit.setUserName(sysUser.getUserName());
+        approvalFlowAudit.setApprovalStatus(dto.getApprovalStatus() != 0);
+        approvalFlowAudit.setApprovalTime(LocalDateTime.now());
+        approvalFlowAudit.setReason(dto.getReason());
+        approvalFlowAuditService.save(approvalFlowAudit);
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery().eq(OaApprovalFlowNode::getApprovalId, approval.getId())
+                .orderByDesc(OaApprovalFlowNode::getSortOrder).list();
+        if (dto.getApprovalStatus()==1){
+            for (OaApprovalFlowNode approvalFlowNode : approvalFlowNodes) {
+                // 判断当前是否处于最后一个节点
+                if(approvalApplications.getCurrentFlowNodeId().equals(approvalFlowNode.getId())){
+                    // 审批通过 审批流程结束
+                    approvalApplications.setApprovalStatus(2);
+                    approvalApplicationsService.updateById(approvalApplications);
+                    if (approval.getApprovalCategory()==1)
+                    break;
+                }
+            }
+        }
+
+        return R.ok();
+    }
 }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java
index d3b950d..0135e65 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java
@@ -1,15 +1,18 @@
 package com.ruoyi.web.controller.api;
 
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.system.dto.SetApprovalDTO;
 import com.ruoyi.system.dto.SetDeptDTO;
 import com.ruoyi.system.model.OaApproval;
 import com.ruoyi.system.model.OaApprovalFlowNode;
 import com.ruoyi.system.query.ApprovalListQuery;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.OaApprovalFlowNodeService;
 import com.ruoyi.system.service.OaApprovalService;
 import com.ruoyi.system.vo.system.ApprovalFlowNodeVO;
@@ -20,6 +23,7 @@
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -30,12 +34,14 @@
  * @since 2025-09-15
  */
 @RestController
-@Api("审批流程")
+@Api(tags ="审批流程")
 @RequestMapping("/oa-approval-flow-node")
 public class OaApprovalFlowNodeController {
     @Resource
     private OaApprovalFlowNodeService oaApprovalFlowNodeService;
 
+    @Resource
+    private ISysUserService sysUserService;
     /**
      * 审批流程设计列表
      */
@@ -60,14 +66,27 @@
         oaApprovalFlowNodeService.updateById(approval);
         return R.ok();
     }
+    @ApiOperation(value = "根据部门查询人员列表")
+    @GetMapping(value = "/listUserByDeptId")
+    public R<List<SysUser>> listUserByDeptId(Integer id ) {
+        List<SysUser> users = sysUserService.selectAllList().stream()
+                .filter(e -> e.getStatus().equals("0") && e.getDeptId().equals(id.toString()))
+                .collect(Collectors.toList());
+        return R.ok(users);
+    }
     @Log(title = "审批流程-设置审批人", businessType = BusinessType.UPDATE)
-
     @ApiOperation(value = "设置审批人")
     @PostMapping(value = "/setApproval")
     public R setDept(@RequestBody SetApprovalDTO dto) {
-        OaApprovalFlowNode approval = oaApprovalFlowNodeService.getById(dto.getId());
-        approval.setApprovalIds(dto.getApprovalIds());
-        oaApprovalFlowNodeService.updateById(approval);
+        LambdaUpdateWrapper<OaApprovalFlowNode> oaApprovalFlowNodeLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        oaApprovalFlowNodeLambdaUpdateWrapper.eq(OaApprovalFlowNode::getId,dto.getId());
+        oaApprovalFlowNodeLambdaUpdateWrapper.set(OaApprovalFlowNode::getApprovalType,dto.getApprovalType());
+        if (dto.getApprovalType() == 1){
+            oaApprovalFlowNodeLambdaUpdateWrapper.set(OaApprovalFlowNode::getApprovalIds,null);
+        }else{
+            oaApprovalFlowNodeLambdaUpdateWrapper.set(OaApprovalFlowNode::getApprovalIds,dto.getApprovalIds());
+        }
+        oaApprovalFlowNodeService.update(oaApprovalFlowNodeLambdaUpdateWrapper);
         return R.ok();
     }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java
index c200d9d..f6309e8 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java
@@ -1,8 +1,34 @@
 package com.ruoyi.web.controller.api;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.entity.TDept;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.emums.ApprovalTypeEnum;
+import com.ruoyi.system.model.*;
+import com.ruoyi.system.query.ApprovalTodoListQuery;
+import com.ruoyi.system.query.NotificationListQuery;
+import com.ruoyi.system.service.*;
+import com.ruoyi.system.vo.ApprovalFlowNodeListVO;
+import com.ruoyi.system.vo.ApprovalTodoVO;
+import com.ruoyi.system.vo.ContractDetailVO;
+import com.ruoyi.system.vo.system.NotificationVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -13,8 +39,358 @@
  * @since 2025-09-15
  */
 @RestController
+@Api(tags ="待办事项")
 @RequestMapping("/oa-approval-todo")
 public class OaApprovalTodoController {
+    @Resource
+    private OaApprovalTodoService approvalTodoService;
+    @Resource
+    private OaApprovalFlowAuditService approvalFlowAuditService;
+    @Resource
+    private OaApprovalApplicationStorageService approvalApplicationStorageService;
+    @Resource
+    private OaApprovalApplicationPurchaseService approvalApplicationPurchaseService;
+    @Resource
+    private OaApprovalApplicationAssetItemService approvalApplicationAssetItemService;
+    @Resource
+    private TokenService tokenService;
+    @Resource
+    private OaApprovalService approvalService;
 
+    @Resource
+    private OaApprovalApplicationsService approvalApplicationsService;
+    @Resource
+    private OaApprovalApplicationAdvertisementService approvalApplicationAdvertisementService;
+    @Resource
+    private OaApprovalApplicationContactService approvalApplicationContactService;
+    @Resource
+    private OaApprovalApplicationPaymentService approvalApplicationPaymentService;
+    @Resource
+    private OaApprovalApplicationContractService approvalApplicationContractService;
+    @Resource
+    private OaApprovalApplicationMoneyService approvalApplicationMoneyService;
+    @Resource
+    private AssetMainService assetMainService;
+    @Resource
+    private OaApprovalApplicationReimbursementService approvalApplicationReimbursementService;
+    @Resource
+    private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService;
+    @Resource
+    private OaApprovalFlowNodeService approvalFlowNodeService;
+    @Resource
+    private OaApprovalApplicationAssetService approvalApplicationAssetService;
+    @Resource
+    private ISysUserService sysUserService;
+    @Resource
+    private OaApprovalApplicationDisposeService approvalApplicationDisposeService;
+    @Resource
+    private OaApprovalApplicationChangeService approvalApplicationChangeService;
+    @Resource
+    private OaApprovalApplicationAttendanceService approvalApplicationAttendanceService;
+    @Resource
+    private TDeptService deptService;
+    @Resource
+    private OaApprovalTodoService oaApprovalTodoService;
+    @Resource
+    private OaApprovalFlowService  approvalFlowService;
+    @ApiOperation("测试接口")
+    @PostMapping("/test")
+    public void test() {
+        List<OaApproval> approvals = approvalService.list();
+        List<OaApprovalFlow> list = approvalFlowService.list();
+        List<OaApprovalFlowNode> oaApprovalFlowNodes = new ArrayList<>();
+        for (OaApproval approval : approvals) {
+            int i = 1;
+            for (OaApprovalFlow oaApprovalFlow : list) {
+                OaApprovalFlowNode oaApprovalFlowNode = new OaApprovalFlowNode();
+                oaApprovalFlowNode.setApprovalId(approval.getId());
+                oaApprovalFlowNode.setApprovalFlowId(oaApprovalFlow.getId());
+                oaApprovalFlowNode.setFlowName(oaApprovalFlow.getFlowName());
+                oaApprovalFlowNode.setSortOrder(i);
+                oaApprovalFlowNode.setApprovalType(0);
+                oaApprovalFlowNode.setStatus(true);
+                oaApprovalFlowNode.setSignFlag(true);
+                i++;
+                oaApprovalFlowNodes.add(oaApprovalFlowNode);
+            }
+        }
+        approvalFlowNodeService.saveBatch(oaApprovalFlowNodes);
+    }
+
+
+    @ApiOperation("待办事项列表")
+    @PostMapping("/pageList")
+    public R<PageInfo<ApprovalTodoVO>> pageList(@RequestBody ApprovalTodoListQuery query) {
+
+        List<ApprovalTodoVO> resList = new ArrayList<>();
+        Long userId = tokenService.getLoginUser().getUserId();
+        query.setUserId(userId);
+        PageInfo<ApprovalTodoVO> res = new PageInfo<>(query.getPageNum(), query.getPageSize());
+
+        PageInfo<OaApprovalTodo> pageInfo = approvalTodoService.pageList(query);
+        List<OaApprovalTodo> list = pageInfo.getRecords();
+        if (list.isEmpty()){
+            return R.ok(new PageInfo<>());
+        }
+        res.setTotal(pageInfo.getTotal());
+        List<Integer> applicationIds = list.stream().map(OaApprovalTodo::getApplicationId).collect(Collectors.toList());
+        Map<Integer, OaApprovalApplicationReimbursement> approvalApplicationReimbursementMap = approvalApplicationReimbursementService.lambdaQuery()
+                .in(OaApprovalApplicationReimbursement::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationReimbursement::getApprovalApplicationId, e -> e));
+        Map<Integer, OaApprovalApplicationMoney> oaApprovalApplicationMoneyMap = approvalApplicationMoneyService.lambdaQuery()
+                .in(OaApprovalApplicationMoney::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationMoney::getApprovalApplicationId, e -> e));
+        Map<Integer, OaApprovalApplicationPayment> approvalApplicationPaymentMap = approvalApplicationPaymentService.lambdaQuery()
+                .in(OaApprovalApplicationPayment::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationPayment::getApprovalApplicationId, e -> e));
+        Map<Integer, OaApprovalApplicationStorage> applicationStorageMap = approvalApplicationStorageService.lambdaQuery()
+                .in(OaApprovalApplicationStorage::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationStorage::getApprovalApplicationId, e -> e));
+        Map<Integer, OaApprovalApplicationAsset> approvalApplicationAssetMap = approvalApplicationAssetService.lambdaQuery()
+                .in(OaApprovalApplicationAsset::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationAsset::getApprovalApplicationId, e -> e));
+        Map<Integer, OaApprovalApplicationDispose> approvalApplicationDisposeMap = approvalApplicationDisposeService.lambdaQuery()
+                .in(OaApprovalApplicationDispose::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationDispose::getApprovalApplicationId, e -> e));
+        Map<Integer, OaApprovalApplicationChange> approvalApplicationChangeMap = approvalApplicationChangeService.lambdaQuery()
+                .in(OaApprovalApplicationChange::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationChange::getApprovalApplicationId, e -> e));
+        Map<Integer, OaApprovalApplicationPurchase> approvalApplicationPurchaseMap = approvalApplicationPurchaseService.lambdaQuery()
+                .in(OaApprovalApplicationPurchase::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationPurchase::getApprovalApplicationId, e -> e));
+        Map<Integer, List<OaApprovalApplicationAssetItem>> approvalApplicationAssetItemMap = approvalApplicationAssetItemService.lambdaQuery()
+                .in(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.groupingBy(OaApprovalApplicationAssetItem::getApprovalApplicationId));
+        Map<Integer, OaApprovalApplicationAdvertisement> approvalApplicationAdvertisementMap = approvalApplicationAdvertisementService.lambdaQuery()
+                .in(OaApprovalApplicationAdvertisement::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationAdvertisement::getApprovalApplicationId, e -> e));
+        Map<Integer, OaApprovalApplicationAttendance> applicationAttendanceMap = approvalApplicationAttendanceService.lambdaQuery()
+                .in(OaApprovalApplicationAttendance::getApprovalApplicationId, applicationIds).list()
+                .stream().collect(Collectors.toMap(OaApprovalApplicationAttendance::getApprovalApplicationId, e -> e));
+
+        Map<Integer, AssetMain> assetMainMap = assetMainService.list().stream().collect(Collectors.toMap(AssetMain::getId, e -> e));
+        Map<Integer, OaApprovalTodo> approvalTodoMap = list.stream().collect(Collectors.toMap(OaApprovalTodo::getApplicationId, e -> e));
+        Map<Long, SysUser> userMap = sysUserService.selectAllList().stream().collect(Collectors.toMap(SysUser::getUserId, e -> e));
+        Map<Integer, TDept> deptMap = deptService.list().stream().collect(Collectors.toMap(TDept::getId, e -> e));
+        Map<Integer, OaApproval> approvalMap = approvalService.list().stream().collect(Collectors.toMap(OaApproval::getId, e -> e));
+        List<OaApprovalApplications> approvalApplications = approvalApplicationsService.lambdaQuery().in(OaApprovalApplications::getId, applicationIds).list();
+        for (OaApprovalApplications approvalApplication : approvalApplications) {
+            ApprovalTodoVO approvalTodoVO = new ApprovalTodoVO();
+            approvalTodoVO.setApprovalCategory(approvalMap.get(approvalApplication.getApprovalId()).getApprovalCategory());
+            switch (approvalTodoVO.getApprovalCategory()){
+                case 1:
+                case 2:
+                case 3:
+                case 4:
+                default:
+                    OaApprovalApplicationAttendance oaApprovalApplicationAttendance = applicationAttendanceMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationAttendance!=null){
+                        approvalTodoVO.setStartTime(oaApprovalApplicationAttendance.getStartTime());
+                        approvalTodoVO.setEndTime(oaApprovalApplicationAttendance.getEndTime());
+                        approvalTodoVO.setDuration(oaApprovalApplicationAttendance.getDuration());
+                    }
+                    break;
+            }
+            SysUser sysUser = userMap.get(approvalApplication.getApplicantUserId().longValue());
+            if (sysUser!=null){
+                approvalTodoVO.setApplyUserName(sysUser.getUserName());
+                TDept tDept = deptMap.get(Integer.parseInt(sysUser.getDeptId()));
+                if (tDept!=null){
+                    approvalTodoVO.setApplyDeptName(tDept.getDeptName());
+                }
+            }
+            approvalTodoVO.setApplicationCode(approvalApplication.getApplicationCode());
+            approvalTodoVO.setCreateTime(approvalApplication.getCreateTime());
+            OaApprovalTodo oaApprovalTodo = approvalTodoMap.get(approvalApplication.getId());
+            approvalTodoVO.setId(oaApprovalTodo.getId());
+            approvalTodoVO.setApplicationId(approvalApplication.getId());
+
+            switch (approvalTodoVO.getApprovalCategory()){
+                case 5:
+                    OaApprovalApplicationPurchase oaApprovalApplicationPurchase = approvalApplicationPurchaseMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationPurchase!=null){
+                        approvalTodoVO.setAmount(oaApprovalApplicationPurchase.getTotalAmount());
+                    }
+                    break;
+                case 6:
+                    OaApprovalApplicationStorage oaApprovalApplicationStorage = applicationStorageMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationStorage!=null){
+                        approvalTodoVO.setStorageType(oaApprovalApplicationStorage.getStorageType());
+                    }
+                    break;
+                case 7:
+                    StringBuilder temp = new StringBuilder();
+                    List<OaApprovalApplicationAssetItem> oaApprovalApplicationAssetItems = approvalApplicationAssetItemMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationAssetItems!=null){
+                        for (OaApprovalApplicationAssetItem oaApprovalApplicationAssetItem : oaApprovalApplicationAssetItems) {
+                            AssetMain assetMain = assetMainMap.get(oaApprovalApplicationAssetItem.getAssetMainId());
+                            if (assetMain!=null){
+                                temp.append(assetMain.getAssetName()).append(",");
+                            }
+                        }
+                        // 去除最后一位字符
+                        if (StringUtils.hasLength(temp.toString())){
+                            approvalTodoVO.setAssetName(temp.substring(0, temp.length() - 1));
+                        }else{
+                            approvalTodoVO.setAssetName("");
+                        }
+                    }
+                    break;
+                case 8:
+                    OaApprovalApplicationAsset oaApprovalApplicationAssetOut = approvalApplicationAssetMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationAssetOut!=null){
+                        approvalTodoVO.setOperateTime(oaApprovalApplicationAssetOut.getOperateTime());
+                    }
+                    break;
+                case 9:
+                    OaApprovalApplicationAsset oaApprovalApplicationAssetBack = approvalApplicationAssetMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationAssetBack!=null){
+                        approvalTodoVO.setOperateTime(oaApprovalApplicationAssetBack.getExpectReturnDate());
+                    }
+                    break;
+                case 10:
+                    OaApprovalApplicationDispose oaApprovalApplicationDispose = approvalApplicationDisposeMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationDispose!=null){
+                        approvalTodoVO.setDisposeType(oaApprovalApplicationDispose.getDisposeType());
+                    }
+                    break;
+                case 11:
+                    OaApprovalApplicationChange oaApprovalApplicationChange = approvalApplicationChangeMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationChange!=null){
+                        Integer ownershipDeptId = oaApprovalApplicationChange.getOwnershipDeptId();
+                        TDept tDept = deptMap.get(ownershipDeptId);
+                        if (tDept!=null){
+                            approvalTodoVO.setOwnershipDeptName(tDept.getDeptName());
+                        }
+                    }
+                    break;
+                case 12:
+                    OaApprovalApplicationReimbursement oaApprovalApplicationReimbursement = approvalApplicationReimbursementMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationReimbursement!=null){
+                        approvalTodoVO.setAmount(oaApprovalApplicationReimbursement.getReimbursementAmount());
+                    }
+                    break;
+                case 13:
+                    OaApprovalApplicationMoney oaApprovalApplicationMoney = oaApprovalApplicationMoneyMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationMoney!=null){
+                        approvalTodoVO.setAmount(oaApprovalApplicationMoney.getApplyAmount());
+                        approvalTodoVO.setDescription(oaApprovalApplicationMoney.getDescription());
+
+                    }
+                    break;
+                case 15:
+                    OaApprovalApplicationPayment oaApprovalApplicationPayment = approvalApplicationPaymentMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationPayment!=null){
+                        approvalTodoVO.setAmount(oaApprovalApplicationPayment.getApplyAmount());
+                        approvalTodoVO.setDescription(approvalApplication.getApplicationReason());
+
+                    }
+                    break;
+                case 17:
+                    OaApprovalApplicationAdvertisement oaApprovalApplicationAdvertisement = approvalApplicationAdvertisementMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationAdvertisement!=null){
+                        approvalTodoVO.setContent(oaApprovalApplicationAdvertisement.getContent());
+                        approvalTodoVO.setAmount(oaApprovalApplicationAdvertisement.getTotalAmount());
+                    }
+                    break;
+            }
+
+            resList.add(approvalTodoVO);
+        }
+        res.setRecords(resList);
+        return R.ok(res);
+    }
+
+
+    @ApiOperation(value = "合同文件审批详情")
+    @GetMapping(value = "/detailContract")
+    public R<ContractDetailVO> detailContract(@ApiParam("待办列表id") Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationContract approvalApplicationContract = approvalApplicationContractService.lambdaQuery()
+                .eq(OaApprovalApplicationContract::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        ContractDetailVO res = new ContractDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTRACT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(approvalApplications, res, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setContractUrl(approvalApplicationContract.getContractUrl());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "进度款支付审批详情")
+    @GetMapping(value = "/detailPayment")
+    public R<ContractDetailVO> detailPayment(@ApiParam("待办列表id") Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationContract approvalApplicationContract = approvalApplicationContractService.lambdaQuery()
+                .eq(OaApprovalApplicationContract::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        ContractDetailVO res = new ContractDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PAYMENT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(approvalApplications, res, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setContractUrl(approvalApplicationContract.getContractUrl());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        return R.ok(res);
+    }
+    private List<ApprovalFlowNodeListVO> getFlowNodeList(OaApprovalApplications approvalApplications, ContractDetailVO res, List<OaApprovalFlowAudit> approvalFlowAudits
+    ,List<OaApprovalFlowNode> approvalFlowNodes) {
+        List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS = new ArrayList<>();
+        Map<Integer, OaApprovalFlowAudit> approvalFlowAuditMap = approvalFlowAudits.stream().collect(Collectors.toMap(OaApprovalFlowAudit::getFlowNodeId, e -> e));
+
+        ApprovalFlowNodeListVO approvalFlowNodeListVO = new ApprovalFlowNodeListVO();
+        approvalFlowNodeListVO.setFlowName("发起");
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            approvalFlowNodeListVO.setUserName(sysUser.getUserName());
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        approvalFlowNodeListVOS.add(approvalFlowNodeListVO);
+        for (OaApprovalFlowNode approvalFlowNode : approvalFlowNodes) {
+            ApprovalFlowNodeListVO approvalFlowNodeVO = new ApprovalFlowNodeListVO();
+
+            OaApprovalFlowAudit approvalFlowAudit = approvalFlowAuditMap.get(approvalFlowNode.getId());
+            if (approvalFlowAudit!=null){
+                approvalFlowNodeVO.setFlowName(approvalFlowAudit.getFlowName());
+                approvalFlowNodeVO.setUserName(approvalFlowAudit.getUserName());
+                approvalFlowNodeVO.setSignPicUrl(approvalFlowAudit.getSignPicUrl());
+                approvalFlowNodeVO.setApprovalStatus(approvalFlowAudit.getApprovalStatus());
+            }else{
+                approvalFlowNodeVO.setFlowName(approvalFlowNode.getFlowName());
+            }
+            approvalFlowNodeListVOS.add(approvalFlowNodeVO);
+
+        }
+        for (OaApprovalFlowAudit approvalFlowAudit : approvalFlowAudits) {
+            ApprovalFlowNodeListVO approvalFlowNodeVO = new ApprovalFlowNodeListVO();
+            approvalFlowNodeVO.setFlowName(approvalFlowAudit.getFlowName());
+            approvalFlowNodeVO.setUserName(approvalFlowAudit.getUserName());
+            approvalFlowNodeVO.setSignPicUrl(approvalFlowAudit.getSignPicUrl());
+            approvalFlowNodeVO.setApprovalStatus(approvalFlowAudit.getApprovalStatus());
+            approvalFlowNodeListVOS.add(approvalFlowNodeVO);
+        }
+        return approvalFlowNodeListVOS;
+    }
 }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java
index 3f36a01..ed3d44e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java
@@ -40,7 +40,7 @@
  * @since 2025-09-15
  */
 @RestController
-@Api("消息通知")
+@Api(tags = "消息通知")
 @RequestMapping("/oa-notification")
 public class OaNotificationController {
     @Resource
@@ -120,7 +120,11 @@
                 String orDefault = deptMap.getOrDefault(Integer.parseInt(deptId), "");
                 deptName.append(orDefault).append(",");
             }
-            notificationDetailVO.setDeptName(deptName.substring(0,deptName.length()-1));
+            if (deptName.length() > 0){
+                notificationDetailVO.setDeptName(deptName.substring(0,deptName.length()-1));
+            }else {
+                notificationDetailVO.setDeptName("");
+            }
             List<NotificationDeptUserDetailVO> notificationUserVOS = new ArrayList<>();
             List<Long> userIds = notifationUsers.stream().map(e -> e.getUserId().longValue()).collect(Collectors.toList());
             if (!userIds.isEmpty()){
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAdvertisementDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAdvertisementDTO.java
new file mode 100644
index 0000000..580f2fa
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAdvertisementDTO.java
@@ -0,0 +1,47 @@
+package com.ruoyi.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "发起广告制作申请记录DTO")
+public class AddAdvertisementDTO implements Serializable {
+
+
+    @ApiModelProperty(value = "事项标题")
+    @TableField("title")
+    private String title;
+
+    @ApiModelProperty(value = "内容")
+    @TableField("content")
+    private String content;
+
+    @ApiModelProperty(value = "数量")
+    @TableField("number")
+    private Integer number;
+
+    @ApiModelProperty(value = "总金额")
+    @TableField("total_amount")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty(value = "规格")
+    @TableField("spec")
+    private String spec;
+
+    @ApiModelProperty(value = "事由/原因/说明/备注")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+
+
+
+
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java
new file mode 100644
index 0000000..153be7e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "发起出差申请记录DTO")
+public class AddBusinessTripDTO implements Serializable {
+
+    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
+    private Double duration;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "外出/出差地点")
+    private String address;
+    @ApiModelProperty(value = "出差项目")
+    private String projectName;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContactDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContactDTO.java
new file mode 100644
index 0000000..2bd1513
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContactDTO.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "发起内部联系单申请记录DTO")
+public class AddContactDTO implements Serializable {
+
+
+
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "详细说明")
+    private String description;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContractDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContractDTO.java
new file mode 100644
index 0000000..145137c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContractDTO.java
@@ -0,0 +1,25 @@
+package com.ruoyi.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "发起合同文件申请记录DTO")
+public class AddContractDTO implements Serializable {
+
+
+
+    @ApiModelProperty(value = "合同文件地址")
+    private String contractUrl;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java
new file mode 100644
index 0000000..0308db9
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java
@@ -0,0 +1,30 @@
+package com.ruoyi.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "发起销假申请记录DTO")
+public class AddLeaveDestroyDTO implements Serializable {
+
+    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
+    private Double duration;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+
+    @ApiModelProperty(value = "关联请假单,格式:yyyy-MM-dd - yyyy-MM-dd")
+    private String leaveTime;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddMoneyDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddMoneyDTO.java
new file mode 100644
index 0000000..3db5f25
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddMoneyDTO.java
@@ -0,0 +1,38 @@
+package com.ruoyi.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "发起款项申请记录DTO")
+public class AddMoneyDTO implements Serializable {
+
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "申请金额")
+    private BigDecimal applyAmount;
+
+    @ApiModelProperty(value = "申请说明")
+    private String description;
+
+    @ApiModelProperty(value = "付款方")
+    private String payer;
+
+    @ApiModelProperty(value = "收款方")
+    private String payee;
+
+    @ApiModelProperty(value = "收款方联系方式")
+    private String payeeContact;
+
+    @ApiModelProperty(value = "收款方账户")
+    private String payeeAccount;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java
new file mode 100644
index 0000000..60d4f8c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java
@@ -0,0 +1,29 @@
+package com.ruoyi.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "发起外出申请记录DTO")
+public class AddOutDTO implements Serializable {
+
+    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
+    private Double duration;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "外出/出差地点")
+    private String address;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddPaymentDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddPaymentDTO.java
new file mode 100644
index 0000000..7952d66
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddPaymentDTO.java
@@ -0,0 +1,29 @@
+package com.ruoyi.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "发起进度款支付申请记录DTO")
+public class AddPaymentDTO implements Serializable {
+
+
+    @ApiModelProperty(value = "关联项目ID")
+    private Integer projectId;
+
+    @ApiModelProperty(value = "合同金额")
+    private BigDecimal contractAmount;
+
+    @ApiModelProperty(value = "申请金额")
+    private BigDecimal applyAmount;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddReimbursementDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddReimbursementDTO.java
new file mode 100644
index 0000000..82cd1db
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddReimbursementDTO.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "发起报销申请记录DTO")
+public class AddReimbursementDTO implements Serializable {
+
+    @ApiModelProperty(value = "报销类型 0-差旅招待交通费,1-企业日常采购,2-房租水电日常,3-聚餐团建,4-其他")
+    private Integer type;
+    @ApiModelProperty(value = "明细")
+    private List<OaApprovalApplicationReimbursementItem> items;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AuditDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AuditDTO.java
new file mode 100644
index 0000000..f8d7808
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AuditDTO.java
@@ -0,0 +1,21 @@
+package com.ruoyi.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "通用审批接口DTO")
+public class AuditDTO implements Serializable {
+
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "不通过原因")
+    private String reason;
+    @ApiModelProperty(value = "审批意见 0-审批不通过,1-审批通过")
+    private Integer approvalStatus;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java
index 6be1e51..d9751c2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java
@@ -12,7 +12,9 @@
 
     @ApiModelProperty(value = "审批流程id")
     private Integer id;
+    @ApiModelProperty(value = "审批类型 0-上级部门,1-指定部门审批,2-指定人员审批")
+    private Integer approvalType;
 
-    @ApiModelProperty(value = "人员ids")
+    @ApiModelProperty(value = "审批类型为上级部门该字段不传,指定部门审批存部门id,指定人员审批存人员id,多个id使用英文逗号拼接")
     private String approvalIds;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalFlowNodeEnum.java b/ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalFlowNodeEnum.java
new file mode 100644
index 0000000..816e549
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalFlowNodeEnum.java
@@ -0,0 +1,57 @@
+package com.ruoyi.system.emums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 审批流程节点枚举
+ *
+ * @author YourName
+ * @since 2025-09-11
+ */
+@Getter
+@AllArgsConstructor
+public enum ApprovalFlowNodeEnum {
+    
+    /**
+     * 部门负责人审批
+     */
+    DEPT(1, "部门负责人审批"),
+    
+    /**
+     * 风险合规部审批
+     */
+    RISK(2, "风险合规部审批"),
+    
+    /**
+     * 财务融资部审批
+     */
+    FINANCE(3, "财务融资部审批"),
+    
+    /**
+     * 分管领导审批
+     */
+    DIVISION(4, "分管领导审批"),
+    
+    /**
+     * 总经理审批
+     */
+    GENERAL(5, "总经理审批"),
+    
+    /**
+     * 董事长审批
+     */
+    CHAIRMAN(6, "董事长审批");
+
+    private final Integer code;
+    private final String desc;
+
+    public static ApprovalFlowNodeEnum getEnumByCode(Integer code) {
+        for (ApprovalFlowNodeEnum e : ApprovalFlowNodeEnum.values()) {
+            if (e.code.equals(code)) {
+                return e;
+            }
+        }
+        return null;
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java
index 4648b8d..1d74359 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java
@@ -1,7 +1,12 @@
 package com.ruoyi.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.model.OaApprovalTodo;
+import com.ruoyi.system.query.ApprovalTodoListQuery;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,6 @@
  */
 public interface OaApprovalTodoMapper extends BaseMapper<OaApprovalTodo> {
 
+    List<OaApprovalTodo> pageList(@Param("query")ApprovalTodoListQuery query, @Param("pageInfo")PageInfo<OaApprovalTodo> pageInfo);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java
index 8292ad7..ed02218 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java
@@ -38,7 +38,7 @@
 
     @ApiModelProperty(value = "审批类型 1-请假申请,2-外出申请,3-出差申请,4-销假申请,5-采购申请,6-资产入库,7-物品领用,8-物品借用,9-借用归还,10-资产处置,11-资产表更,12-报销申请,13-款项申请,14-合同文件,15-进度款支付,16-内部联系单,17-广告制作申请")
     @TableField("approval_category")
-    private Boolean approvalCategory;
+    private Integer approvalCategory;
 
     @ApiModelProperty(value = "当前状态 0-禁用,1-启用")
     @TableField("status")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java
index 078c3d0..ca12c49 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java
@@ -60,5 +60,9 @@
     @TableField("leave_approval_application_id")
     private Integer leaveApprovalApplicationId;
 
+    @ApiModelProperty(value = "是否是请假申请 0否1是")
+    @TableField("is_leave")
+    private Boolean isLeave;
+
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java
index 840e03c..f599f07 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java
@@ -24,7 +24,7 @@
 @Data
 @EqualsAndHashCode(callSuper = false)
 @TableName("oa_approval_application_dispose")
-@ApiModel(value="OaApprovalApplicationDispose对象", description="资产领用单明细表")
+@ApiModel(value="OaApprovalApplicationDispose对象", description="资产处置单明细表")
 public class OaApprovalApplicationDispose implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -51,7 +51,7 @@
 
     @ApiModelProperty(value = "处置方式 0-报废,1-报损,2-捐赠")
     @TableField("dispose_type")
-    private Boolean disposeType;
+    private Integer disposeType;
 
     @ApiModelProperty(value = "处置总金额(元)")
     @TableField("dispose_total_amount")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java
index 70996a5..538e289 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java
@@ -10,6 +10,7 @@
 import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * <p>
@@ -37,7 +38,9 @@
 
     @ApiModelProperty(value = "报销类型 0-差旅招待交通费,1-企业日常采购,2-房租水电日常,3-聚餐团建,4-其他")
     @TableField("type")
-    private Boolean type;
+    private Integer type;
 
-
+    @ApiModelProperty(value = "总金额")
+    @TableField("reimbursement_amount")
+    private BigDecimal reimbursementAmount;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java
index a1b5055..3565487 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java
@@ -32,13 +32,13 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
-    @ApiModelProperty(value = "报销申请记录ID")
+    @ApiModelProperty(value = "报销申请记录ID 前端不传")
     @TableField("approval_application_id")
     private Integer approvalApplicationId;
 
     @ApiModelProperty(value = "报销类型 0-飞机票,1-火车票,2-的士费,3-住宿费,4-餐饮费,5-礼品费,6-活动费,7-通讯费,8-补助,9-办公费,10-采购费,11-水电费,12-修理费,13-养路费,14-燃料费,15-其他")
     @TableField("fee_type")
-    private Boolean feeType;
+    private Integer feeType;
 
     @ApiModelProperty(value = "费用金额")
     @TableField("amount")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java
index 4e3b3a3..f120640 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java
@@ -48,14 +48,14 @@
     @ApiModelProperty(value = "申请人")
     @TableField("applicant_name")
     private String applicantName;
-
+    @ApiModelProperty(value = "所属部门")
+    @TableField("dept_name")
+    private String deptName;
     @ApiModelProperty(value = "部门ID")
     @TableField("dept_id")
     private Integer deptId;
 
-    @ApiModelProperty(value = "所属部门")
-    @TableField("dept_name")
-    private String deptName;
+
 
     @ApiModelProperty(value = "申请日期")
     @TableField("application_date")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java
index 05f04aa..01bee13 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -72,5 +73,8 @@
     @TableField("handle_time")
     private LocalDateTime handleTime;
 
+    @ApiModelProperty(value = "是否删除 0-否,1-是")
+    @TableField("disabled")
+    private Integer disabled;
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java
new file mode 100644
index 0000000..caa4340
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "代办事项分页列表query")
+public class ApprovalTodoListQuery extends BasePage {
+
+    @ApiModelProperty("用户id 前端忽略")
+    private Long userId;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java
index 5b7f46d..909fea6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java
@@ -1,8 +1,13 @@
 package com.ruoyi.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.model.OaApprovalFlowNode;
 import com.ruoyi.system.model.OaApprovalTodo;
+import com.ruoyi.system.query.ApprovalTodoListQuery;
+import com.ruoyi.system.vo.ApprovalTodoVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -22,4 +27,7 @@
      * @param deptId          申请部门ID(用于上级部门审批场景)
      */
     void createApprovalTodos(Integer applicationId, String applicationCode, OaApprovalFlowNode flowNode, Integer deptId);
+
+
+    PageInfo<OaApprovalTodo> pageList(ApprovalTodoListQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java
index 503c9d6..da7af41 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java
@@ -2,17 +2,24 @@
 
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.entity.TDept;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.system.mapper.OaApprovalTodoMapper;
 import com.ruoyi.system.model.OaApprovalFlowNode;
 import com.ruoyi.system.model.OaApprovalTodo;
+import com.ruoyi.system.query.ApprovalTodoListQuery;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.OaApprovalTodoService;
+import com.ruoyi.system.service.TDeptService;
+import com.ruoyi.system.vo.ApprovalTodoVO;
+import com.ruoyi.system.vo.system.NotificationVO;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.core.token.TokenService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -34,7 +41,7 @@
 public class OaApprovalTodoServiceImpl extends ServiceImpl<OaApprovalTodoMapper, OaApprovalTodo> implements OaApprovalTodoService {
 
     private final ISysUserService sysUserService;
-    private final ISysDeptService sysDeptService;
+    private final TDeptService deptService;
 
     /**
      * 创建审批待办(公共实现)
@@ -62,6 +69,15 @@
         }
     }
 
+    @Override
+    public PageInfo<OaApprovalTodo> pageList(ApprovalTodoListQuery query) {
+        PageInfo<OaApprovalTodo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        List<OaApprovalTodo> list = this.baseMapper.pageList(query,pageInfo);
+        pageInfo.setRecords( list);
+        return pageInfo;
+    }
+
+
     /**
      * 创建上级部门审批待办
      */
@@ -71,7 +87,7 @@
             throw new ServiceException("未填写申请部门信息");
         }
 
-        SysDept currentDept = sysDeptService.selectDeptById(Long.valueOf(deptId));
+        TDept currentDept = deptService.getById(Long.valueOf(deptId));
         if (currentDept == null) {
             throw new ServiceException("申请部门信息不存在");
         }
@@ -81,13 +97,13 @@
             throw new ServiceException("当前部门没有上级部门");
         }
 
-        SysDept parentDept = sysDeptService.selectDeptById(currentDept.getParentId());
+        TDept parentDept = deptService.getById(currentDept.getParentId());
         if (parentDept == null) {
             throw new ServiceException("上级部门信息不存在");
         }
 
         // 3. 查询所有关联了该上级部门的用户
-        List<SysUser> users = sysUserService.selectListByDeptId(parentDept.getDeptId().toString());
+        List<SysUser> users = sysUserService.selectListByDeptId(parentDept.getId().toString());
         if (CollUtil.isEmpty(users)) {
             throw new ServiceException("上级部门下没有找到用户");
         }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java
deleted file mode 100644
index c3cc586..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package com.ruoyi.system.utils;
-
-/**
- * 审批类型枚举
- *
- * @author YourName
- * @since 2025-09-17
- */
-public enum ApprovalTypeEnum {
-    
-    /**
-     * 请假申请
-     */
-    LEAVE_APPLICATION(1, "请假申请"),
-    
-    /**
-     * 外出申请
-     */
-    OUT_APPLICATION(2, "外出申请"),
-    
-    /**
-     * 出差申请
-     */
-    BUSINESS_TRIP_APPLICATION(3, "出差申请"),
-    
-    /**
-     * 销假申请
-     */
-    LEAVE_CANCELLATION_APPLICATION(4, "销假申请"),
-    
-    /**
-     * 采购申请
-     */
-    PURCHASE_APPLICATION(5, "采购申请"),
-    
-    /**
-     * 资产入库
-     */
-    ASSET_STORAGE(6, "资产入库"),
-    
-    /**
-     * 物品领用
-     */
-    ITEM_RECEIVE(7, "物品领用"),
-    
-    /**
-     * 物品借用
-     */
-    ITEM_BORROW(8, "物品借用"),
-    
-    /**
-     * 借用归还
-     */
-    BORROW_RETURN(9, "借用归还"),
-    
-    /**
-     * 资产处置
-     */
-    ASSET_DISPOSAL(10, "资产处置"),
-    
-    /**
-     * 资产变更
-     */
-    ASSET_CHANGE(11, "资产变更"),
-    
-    /**
-     * 报销申请
-     */
-    REIMBURSEMENT_APPLICATION(12, "报销申请"),
-    
-    /**
-     * 款项申请
-     */
-    PAYMENT_APPLICATION(13, "款项申请"),
-    
-    /**
-     * 合同文件
-     */
-    CONTRACT_DOCUMENT(14, "合同文件"),
-    
-    /**
-     * 进度款支付
-     */
-    PROGRESS_PAYMENT(15, "进度款支付"),
-    
-    /**
-     * 内部联系单
-     */
-    INTERNAL_CONTACT_FORM(16, "内部联系单"),
-    
-    /**
-     * 广告制作申请
-     */
-    ADVERTISEMENT_APPLICATION(17, "广告制作申请");
-
-    private final Integer id;
-    private final String name;
-
-    /**
-     * 构造方法
-     *
-     * @param id   审批类型ID
-     * @param name 审批类型名称
-     */
-    ApprovalTypeEnum(Integer id, String name) {
-        this.id = id;
-        this.name = name;
-    }
-
-    /**
-     * 获取审批类型ID
-     *
-     * @return 审批类型ID
-     */
-    public Integer getId() {
-        return id;
-    }
-
-    /**
-     * 获取审批类型名称
-     *
-     * @return 审批类型名称
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * 根据ID获取审批类型枚举
-     *
-     * @param id 审批类型ID
-     * @return 对应的审批类型枚举,如果未找到返回null
-     */
-    public static ApprovalTypeEnum getById(Integer id) {
-        if (id == null) {
-            return null;
-        }
-        
-        for (ApprovalTypeEnum type : values()) {
-            if (type.id.equals(id)) {
-                return type;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * 根据名称获取审批类型枚举
-     *
-     * @param name 审批类型名称
-     * @return 对应的审批类型枚举,如果未找到返回null
-     */
-    public static ApprovalTypeEnum getByName(String name) {
-        if (name == null || name.isEmpty()) {
-            return null;
-        }
-        
-        for (ApprovalTypeEnum type : values()) {
-            if (type.name.equals(name)) {
-                return type;
-            }
-        }
-        return null;
-    }
-    
-    /**
-     * 判断给定ID是否为有效的审批类型
-     *
-     * @param id 审批类型ID
-     * @return 是否有效
-     */
-    public static boolean isValidId(Integer id) {
-        return getById(id) != null;
-    }
-}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java
new file mode 100644
index 0000000..7c619d8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java
@@ -0,0 +1,51 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "广告制作详情返回VO")
+public class AdvertisementDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+
+
+    @ApiModelProperty(value = "事项标题")
+    private String title;
+    @ApiModelProperty(value = "申请日期")
+    @JsonFormat(pattern = "yyyy-MM-dd ", timezone = "GMT+8")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "内容")
+    private String content;
+
+    @ApiModelProperty(value = "数量")
+    private Integer number;
+
+    @ApiModelProperty(value = "总金额")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty(value = "规格")
+    private String spec;
+    
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalFlowNodeListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalFlowNodeListVO.java
new file mode 100644
index 0000000..f268cc9
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalFlowNodeListVO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "审批流程通用返回VO")
+public class ApprovalFlowNodeListVO implements Serializable {
+
+    @ApiModelProperty(value = "审批流程名称")
+    private String flowName;
+    @ApiModelProperty(value = "发起人/审批人名称")
+    private String userName;
+    @ApiModelProperty(value = "签字图片地址")
+    private String signPicUrl;
+    @ApiModelProperty(value = "审批意见 0-审批不通过,1-审批通过")
+    private Boolean approvalStatus;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java
new file mode 100644
index 0000000..28b8938
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java
@@ -0,0 +1,69 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.system.model.OaApprovalTodo;
+import com.ruoyi.system.model.OaNotification;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "待办事项列表返回VO")
+public class ApprovalTodoVO implements Serializable {
+
+
+    @ApiModelProperty(value = "审批类型 1-请假申请,2-外出申请,3-出差申请,4-销假申请,5-采购申请,6-资产入库,7-物品领用,8-物品借用,9-借用归还,10-资产处置,11-资产表更,12-报销申请,13-款项申请,14-合同文件,15-进度款支付,16-内部联系单,17-广告制作申请")
+    private Integer approvalCategory;
+    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
+    private Double duration;
+    @ApiModelProperty(value = "申请人名称")
+    private String applyUserName;
+    @ApiModelProperty(value = "申请人部门名称")
+    private String applyDeptName;
+    @ApiModelProperty(value = "申请单号")
+    private String applicationCode;
+    @ApiModelProperty(value = "申请时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "代办id")
+    private Integer id;
+    @ApiModelProperty(value = "审批申请ID")
+    private Integer applicationId;
+
+    @ApiModelProperty(value = "报销金额/申请金额/合计金额/总金额(报销申请/款项申请/款项支付审批/广告制作)")
+    private BigDecimal amount;
+    @ApiModelProperty(value = "入库类型 0-正常入库(资产入库)")
+    private Boolean storageType;
+    @ApiModelProperty(value = "领用/借用/归还日期(物品借用/领用归还)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDate operateTime;
+
+    @ApiModelProperty(value = "处置方式 0-报废,1-报损,2-捐赠(资产处置)")
+    private Integer disposeType;
+    @ApiModelProperty(value = "更改方(资产变更)")
+    private String ownershipDeptName;
+    @ApiModelProperty(value = "领用物品(资产领用)")
+    private String assetName;
+    @ApiModelProperty(value = "申请说明/申请事由(款项申请/款项支付审批)")
+    private String description;
+    @ApiModelProperty(value = "内容(广告制作)")
+    private String content;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java
new file mode 100644
index 0000000..b39a4b0
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java
@@ -0,0 +1,44 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.basic.PageInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "借用归还审批详情返回VO")
+public class BackDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "借用人")
+    private String userName;
+    @ApiModelProperty(value = "借用部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "借用日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate operateTime;
+    @ApiModelProperty(value = "归还日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate expectReturnDate;
+    @ApiModelProperty(value = "标题")
+    private String title;
+    @ApiModelProperty(value = "借用单据号")
+    private String applicationCode;
+
+    @ApiModelProperty(value = "借用资产列表")
+    private PageInfo<BackListVO> backListVOPageInfo;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackListVO.java
new file mode 100644
index 0000000..a9c46aa
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackListVO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+@Data
+@ApiModel(value = "归还资产列表返回VO")
+public class BackListVO implements Serializable {
+
+    @ApiModelProperty(value = "资产名称")
+    private String assetName;
+    @ApiModelProperty(value = "资产类型")
+    private String assetTypeName;
+    @ApiModelProperty(value = "资产编码")
+    private String assetCode;
+    @ApiModelProperty(value = "归属部门")
+    private String ownershipDeptName;
+    @ApiModelProperty(value = "资产状态")
+    private String assetStatus;
+    @ApiModelProperty(value = "使用部门/位置")
+    private String useName;
+    @ApiModelProperty(value = "入库日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate storageTime;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java
new file mode 100644
index 0000000..ef68812
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java
@@ -0,0 +1,40 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.basic.PageInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "物品借用审批详情返回VO")
+public class BorrowDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "借用人")
+    private String userName;
+    @ApiModelProperty(value = "借用部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "借用日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate operateTime;
+    @ApiModelProperty(value = "预计归还日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate expectReturnDate;
+
+    @ApiModelProperty(value = "借用资产列表")
+    private PageInfo<BorrowListVO> borrowListVOPageInfo;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowListVO.java
new file mode 100644
index 0000000..c47b983
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowListVO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+@Data
+@ApiModel(value = "借用资产列表返回VO")
+public class BorrowListVO implements Serializable {
+
+    @ApiModelProperty(value = "资产名称")
+    private String assetName;
+    @ApiModelProperty(value = "资产类型")
+    private String assetTypeName;
+    @ApiModelProperty(value = "资产编码")
+    private String assetCode;
+    @ApiModelProperty(value = "归属部门")
+    private String ownershipDeptName;
+    @ApiModelProperty(value = "资产状态")
+    private String assetStatus;
+    @ApiModelProperty(value = "使用部门/位置")
+    private String useName;
+    @ApiModelProperty(value = "入库日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate storageTime;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java
new file mode 100644
index 0000000..944d4b3
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java
@@ -0,0 +1,45 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "出差审批详情返回VO")
+public class BusinessTripDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "外出/出差地点")
+    private String address;
+    @ApiModelProperty(value = "出差项目")
+    private String projectName;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private LocalDateTime startTime;
+    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private Double duration;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java
new file mode 100644
index 0000000..ffc479d
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java
@@ -0,0 +1,46 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.basic.PageInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "资产变更审批详情返回VO")
+public class ChangeDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "领用人")
+    private String userName;
+    @ApiModelProperty(value = "领用部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "领用日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate ChangeTime;
+    @ApiModelProperty(value = "标题")
+    private String title;
+    @ApiModelProperty(value = "资产类型名称")
+    private String assetTypeName;
+    @ApiModelProperty(value = "部门 ")
+    private String ownershipDeptName;
+    @ApiModelProperty(value = "仓库")
+    private String warehouseName;
+    @ApiModelProperty(value = "地址")
+    private String address;
+    @ApiModelProperty(value = "领用资产列表")
+    private PageInfo<ChangeListVO> grabListVOPageInfo;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeListVO.java
new file mode 100644
index 0000000..a9a7fc8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeListVO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+@Data
+@ApiModel(value = "资产变更列表返回VO")
+public class ChangeListVO implements Serializable {
+
+    @ApiModelProperty(value = "资产名称")
+    private String assetName;
+    @ApiModelProperty(value = "资产类型")
+    private String assetTypeName;
+    @ApiModelProperty(value = "资产编码")
+    private String assetCode;
+    @ApiModelProperty(value = "归属部门")
+    private String ownershipDeptName;
+    @ApiModelProperty(value = "资产状态")
+    private String assetStatus;
+    @ApiModelProperty(value = "使用部门/位置")
+    private String useName;
+    @ApiModelProperty(value = "入库日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate storageTime;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java
new file mode 100644
index 0000000..9007069
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "内部联系单详情返回VO")
+public class ContactDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "详细说明")
+    private String description;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java
new file mode 100644
index 0000000..a433845
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java
@@ -0,0 +1,35 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.system.model.OaApprovalApplicationContract;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "待审批合同文件详情返回VO")
+public class ContractDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "合同文件地址")
+    private String contractUrl;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java
new file mode 100644
index 0000000..aa2e520
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java
@@ -0,0 +1,46 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.basic.PageInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "资产处置审批详情返回VO")
+public class DisposeDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "领用人")
+    private String userName;
+    @ApiModelProperty(value = "领用部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "处置日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate disposeTime;
+    @ApiModelProperty(value = "标题")
+    private String title;
+    @ApiModelProperty(value = "处置资产类型名称")
+    private String assetTypeName;
+    @ApiModelProperty(value = "处置方式 0-报废,1-报损,2-捐赠")
+    private Integer disposeType;
+    @ApiModelProperty(value = "处置总金额(元)")
+    private BigDecimal disposeTotalAmount;
+    @ApiModelProperty(value = "处置资产列表")
+    private PageInfo<GrabListVO> grabListVOPageInfo;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeListVO.java
new file mode 100644
index 0000000..50f3c17
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeListVO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+@Data
+@ApiModel(value = "领用资产列表返回VO")
+public class DisposeListVO implements Serializable {
+
+    @ApiModelProperty(value = "资产名称")
+    private String assetName;
+    @ApiModelProperty(value = "资产类型")
+    private String assetTypeName;
+    @ApiModelProperty(value = "资产编码")
+    private String assetCode;
+    @ApiModelProperty(value = "归属部门")
+    private String ownershipDeptName;
+    @ApiModelProperty(value = "资产状态")
+    private String assetStatus;
+    @ApiModelProperty(value = "使用部门/位置")
+    private String useName;
+    @ApiModelProperty(value = "入库日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate storageTime;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java
new file mode 100644
index 0000000..a654cc3
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java
@@ -0,0 +1,41 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.basic.PageInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "物品领用审批详情返回VO")
+public class GrabDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "领用人")
+    private String userName;
+    @ApiModelProperty(value = "领用部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "领用日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate operateTime;
+    @ApiModelProperty(value = "标题")
+    private String title;
+    @ApiModelProperty(value = "资产类型名称")
+    private String assetTypeName;
+    @ApiModelProperty(value = "领用资产列表")
+    private PageInfo<GrabListVO> grabListVOPageInfo;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabListVO.java
new file mode 100644
index 0000000..f9a58d7
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabListVO.java
@@ -0,0 +1,34 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "领用资产列表返回VO")
+public class GrabListVO implements Serializable {
+
+    @ApiModelProperty(value = "资产名称")
+    private String assetName;
+    @ApiModelProperty(value = "资产类型")
+    private String assetTypeName;
+    @ApiModelProperty(value = "资产编码")
+    private String assetCode;
+    @ApiModelProperty(value = "归属部门")
+    private String ownershipDeptName;
+    @ApiModelProperty(value = "资产状态")
+    private String assetStatus;
+    @ApiModelProperty(value = "使用部门/位置")
+    private String useName;
+    @ApiModelProperty(value = "入库日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate storageTime;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java
new file mode 100644
index 0000000..6a7d6f7
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java
@@ -0,0 +1,39 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "销假审批详情返回VO")
+public class LeaveDestroyDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private LocalDateTime startTime;
+    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
+    private Double duration;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java
new file mode 100644
index 0000000..71cc9bb
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java
@@ -0,0 +1,41 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "请假审批详情返回VO")
+public class LeaveDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private LocalDateTime startTime;
+    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
+    private Double duration;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java
new file mode 100644
index 0000000..708594e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java
@@ -0,0 +1,50 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "款项审批详情返回VO")
+public class MoneyDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "申请金额")
+    private BigDecimal applyAmount;
+
+    @ApiModelProperty(value = "申请说明")
+    private String description;
+
+    @ApiModelProperty(value = "付款方")
+    private String payer;
+
+    @ApiModelProperty(value = "收款方")
+    private String payee;
+
+    @ApiModelProperty(value = "收款方联系方式")
+    private String payeeContact;
+
+    @ApiModelProperty(value = "收款方账户")
+    private String payeeAccount;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java
new file mode 100644
index 0000000..da30481
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java
@@ -0,0 +1,39 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "外出审批详情返回VO")
+public class OutDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private LocalDateTime startTime;
+    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
+    private Double duration;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java
new file mode 100644
index 0000000..23a9d1e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java
@@ -0,0 +1,32 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "进度款支付详情返回VO")
+public class PaymentDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "关联项目")
+    private String projectName;
+    @ApiModelProperty(value = "申请金额")
+    private BigDecimal applyAmount;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java
new file mode 100644
index 0000000..64e63b6
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java
@@ -0,0 +1,42 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.basic.PageInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "采购审批详情返回VO")
+public class PurchaseDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "申请日期")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "总金额")
+    private BigDecimal totalAmount;
+    @ApiModelProperty(value = "标题")
+    private String title;
+    @ApiModelProperty(value = "资产类型名称")
+    private String assetTypeName;
+    @ApiModelProperty(value = "采购物品清单")
+    private PageInfo<PurchaseListVO> purchaseListVOPageInfo;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseListVO.java
new file mode 100644
index 0000000..712cc66
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseListVO.java
@@ -0,0 +1,33 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "采购物品清单列表返回VO")
+public class PurchaseListVO implements Serializable {
+
+    @ApiModelProperty(value = "资产名称")
+    private String assetName;
+    @ApiModelProperty(value = "资产分类")
+    private String assetTypeName;
+    @ApiModelProperty(value = "总金额")
+    private BigDecimal totalAmount;
+    @ApiModelProperty(value = "规格型号")
+    private String spec;
+    @ApiModelProperty(value = "单位")
+    private String unit;
+    @ApiModelProperty(value = "数量")
+    private Integer quantity;
+    @ApiModelProperty(value = "单价(元)")
+    private BigDecimal price;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java
new file mode 100644
index 0000000..805f548
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java
@@ -0,0 +1,35 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.List;
+
+@Data
+@ApiModel(value = "报销审批详情返回VO")
+public class ReimbursementDetailVO implements Serializable {
+
+    @ApiModelProperty(value = "申请人")
+    private String userName;
+    @ApiModelProperty(value = "所属部门")
+    private String deptName;
+    @ApiModelProperty(value = "事由/原因/说明")
+    private String applicationReason;
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "报销类型 0-差旅招待交通费,1-企业日常采购,2-房租水电日常,3-聚餐团建,4-其他")
+    private Integer type;
+    @ApiModelProperty(value = "费用明细")
+    private List<OaApprovalApplicationReimbursementItem> approvalApplicationReimbursementItems;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java
new file mode 100644
index 0000000..6b333a3
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java
@@ -0,0 +1,39 @@
+package com.ruoyi.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.basic.PageInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "资产入库审批详情返回VO")
+public class StorageDetailVO implements Serializable {
+
+
+
+    @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
+    private String attachmentUrl;
+    @ApiModelProperty(value = "审批申请记录ID")
+    private Integer approvalApplicationId;
+    @ApiModelProperty(value = "标题")
+    private String title;
+    @ApiModelProperty(value = "入库类型 0-正常入库")
+    private Integer storageType;
+    @ApiModelProperty(value = "入库日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate storageTime;
+    @ApiModelProperty(value = "入库备注")
+    private String remarks;
+
+    @ApiModelProperty(value = "采购物品清单")
+    private PageInfo<GrabListVO> grabListVOPageInfo;
+    @ApiModelProperty(value = "审批流程")
+    private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java
new file mode 100644
index 0000000..25cf045
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java
@@ -0,0 +1,59 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+@Data
+@ApiModel(value = "入库资产列表返回VO")
+public class StorageListVO implements Serializable {
+
+    @ApiModelProperty(value = "资产名称")
+    private String assetName;
+    @ApiModelProperty(value = "规格型号")
+    private String specificationModel;
+    @ApiModelProperty(value = "资产类型")
+    private String assetTypeName;
+    @ApiModelProperty(value = "计量单位")
+    private String measurementUnit;
+
+    @ApiModelProperty(value = "数量")
+    private BigDecimal quantity;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+    @ApiModelProperty(value = "总价值(数量*单价)")
+    private BigDecimal totalValue;
+    @ApiModelProperty(value = "入账时间")
+    @TableField("accounting_date")
+    private LocalDate accountingDate;
+
+    @ApiModelProperty(value = "会计凭证号")
+    private String accountingVoucherNo;
+
+    @ApiModelProperty(value = "会计科目")
+    private String accountingSubject;
+
+    @ApiModelProperty(value = "入账金额")
+    private BigDecimal accountingAmount;
+    @ApiModelProperty(value = "入账状态")
+    private String accountingStatus;
+    @ApiModelProperty(value = "资产状态")
+    private String assetStatus;
+    @ApiModelProperty(value = "归属部门")
+    private String ownershipDeptName;
+    @ApiModelProperty(value = "使用人")
+    private String userName;
+    @ApiModelProperty(value = "使用部门/位置")
+    private String useName;
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+    @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址")
+    private Integer addressType;
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml
index 3726d47..dccbb19 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml
@@ -21,5 +21,15 @@
     <sql id="Base_Column_List">
         id, application_id, application_code, flow_node_id, user_id, user_name, dept_id, sort_order, status, create_time, handle_time
     </sql>
+    <select id="pageList" resultType="com.ruoyi.system.model.OaApprovalTodo">
+        select * from oa_approval_todo
+        where 1=1
+        <if test="query.userId != null">
+            and user_id = #{query.userId}
+        </if>
+        and status = 0
+        group by application_id
+        order by create_time desc
+    </select>
 
 </mapper>

--
Gitblit v1.7.1