From 0e6da184ed0a6d511a17e1ed86a470cda71c0f3b Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 22 九月 2025 16:51:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java                                   |   21 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationStorageMapper.java                 |    8 
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                                            |   23 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java                                        |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java      |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseItemServiceImpl.java |   13 
 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml                  |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationStorageService.java               |    5 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java                  |  977 ++++++++++++++++++++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java                                   |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java                                           |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java                                      |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java                           |   14 
 ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml                                     |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java    |   13 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java                                           |    3 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java                       |  708 +++++++++++++++++++-
 ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java                                          |    1 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java                                         |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java                                       |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalDetailQuery.java                                 |   18 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java                                        |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetItemMapper.java               |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java                             |    2 
 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml                       |   18 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java                           |   57 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationPurchaseItemMapper.java            |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationPurchaseItemService.java          |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java                                         |    3 
 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetItemMapper.xml                     |   32 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java                               |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java                                         |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java             |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java                    |    8 
 34 files changed, 1,901 insertions(+), 100 deletions(-)

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 f3df0be..098995e 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
@@ -3,24 +3,33 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.core.domain.model.LoginUser;
 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.emums.ApprovalTypeEnum;
 import com.ruoyi.system.model.*;
+import com.ruoyi.system.query.ApprovalDetailQuery;
+import com.ruoyi.system.query.ApprovalTodoListQuery;
 import com.ruoyi.system.service.*;
+import com.ruoyi.system.vo.*;
 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 io.swagger.annotations.ApiParam;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -42,6 +51,8 @@
     private OaApprovalApplicationStorageService approvalApplicationStorageService;
     @Resource
     private OaApprovalApplicationPurchaseService approvalApplicationPurchaseService;
+    @Resource
+    private OaApprovalApplicationPurchaseItemService approvalApplicationPurchaseItemService;
     @Resource
     private OaApprovalApplicationAssetItemService approvalApplicationAssetItemService;
     @Resource
@@ -82,9 +93,913 @@
     @Resource
     private TDeptService deptService;
     @Resource
+    private AssetTypeService assetTypeService;
+    @Resource
     private OaApprovalTodoService oaApprovalTodoService;
     @Resource
-    private OaApprovalFlowService approvalFlowService;
+    private OaApprovalFlowService  approvalFlowService;
+
+
+
+    @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.pageListAudit(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();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList( sysUser, 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<PaymentDetailVO> detailPayment(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationPayment approvalApplicationPayment = approvalApplicationPaymentService.lambdaQuery()
+                .eq(OaApprovalApplicationPayment::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        PaymentDetailVO res = new PaymentDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PAYMENT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        // todo 三阶段设计项目表之后完善
+        res.setProjectName("本期还未涉及到项目");
+        res.setApplyAmount(approvalApplicationPayment.getApplyAmount());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "请假申请审批详情")
+    @GetMapping(value = "/detailLeave")
+    public R<LeaveDetailVO> detailLeave(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        LeaveDetailVO res = new LeaveDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setStartTime(approvalApplicationAttendance.getStartTime());
+        res.setEndTime(approvalApplicationAttendance.getEndTime());
+        res.setDuration(approvalApplicationAttendance.getDuration());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "销假审批详情")
+    @GetMapping(value = "/detailLeaveDestroy")
+    public R<LeaveDestroyDetailVO> detailLeaveDestroy(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        OaApprovalApplicationAttendance leaveApplication = approvalApplicationAttendanceService.getById(approvalApplicationAttendance.getLeaveApprovalApplicationId());
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        LeaveDestroyDetailVO res = new LeaveDestroyDetailVO();
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE_DESTROY.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setStartTime(approvalApplicationAttendance.getStartTime());
+        res.setEndTime(approvalApplicationAttendance.getEndTime());
+        res.setStartTimeLeave(leaveApplication.getStartTime());
+        res.setEndTimeLeave(leaveApplication.getEndTime());
+        res.setDurationLeave(leaveApplication.getDuration());
+        res.setDuration(approvalApplicationAttendance.getDuration());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "外出申请审批详情")
+    @GetMapping(value = "/detailOut")
+    public R<OutDetailVO> detailOut(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        OutDetailVO res = new OutDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.OUT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setStartTime(approvalApplicationAttendance.getStartTime());
+        res.setEndTime(approvalApplicationAttendance.getEndTime());
+        res.setDuration(approvalApplicationAttendance.getDuration());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "出差审批详情")
+    @GetMapping(value = "/detailBusinessTrip")
+    public R<BusinessTripDetailVO> detailBusinessTrip(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        BusinessTripDetailVO res = new BusinessTripDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BUSINESS_TRIP.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setStartTime(approvalApplicationAttendance.getStartTime());
+        res.setEndTime(approvalApplicationAttendance.getEndTime());
+        res.setDuration(approvalApplicationAttendance.getDuration());
+        res.setAddress(approvalApplicationAttendance.getAddress());
+        res.setProjectName(approvalApplicationAttendance.getProjectName());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "采购审批详情-采购物品清单")
+    @PostMapping(value = "/detailPurchaseList")
+    public R<PageInfo<PurchaseListVO>> detailPurchaseList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<PurchaseListVO> items = approvalApplicationPurchaseItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "采购审批详情")
+    @GetMapping(value = "/detailPurchase")
+    public R<PurchaseDetailVO> detailPurchase(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationPurchase approvalApplicationPurchase = approvalApplicationPurchaseService.lambdaQuery()
+                .eq(OaApprovalApplicationPurchase::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        PurchaseDetailVO res = new PurchaseDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PURCHASE.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setCreateTime(approvalApplications.getCreateTime());
+        res.setTotalAmount(approvalApplicationPurchase.getTotalAmount());
+        res.setTitle(approvalApplicationPurchase.getTitle());
+        AssetType assetType = assetTypeService.getById(approvalApplicationPurchase.getAssetTypeId());
+        if (assetType!=null){
+            res.setAssetTypeName(assetType.getTypeName());
+        }
+        return R.ok(res);
+    }
+    @ApiOperation(value = "物品领用-领用资产列表")
+    @PostMapping(value = "/detailGrabList")
+    public R<PageInfo<GrabListVO>> detailGrabList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "物品领用审批详情")
+    @GetMapping(value = "/detailGrab")
+    public R<GrabDetailVO> detailGrab(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAsset approvalApplicationAsset = approvalApplicationAssetService.lambdaQuery()
+                .eq(OaApprovalApplicationAsset::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        GrabDetailVO res = new GrabDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.GRAB.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setOperateTime(approvalApplicationAsset.getOperateTime());
+        res.setTitle(approvalApplicationAsset.getTitle());
+        AssetType assetType = assetTypeService.getById(approvalApplicationAsset.getAssetTypeId());
+        if (assetType!=null){
+            res.setAssetTypeName(assetType.getTypeName());
+        }
+        return R.ok(res);
+    }
+    @ApiOperation(value = "资产入库-入库资产列表")
+    @PostMapping(value = "/detailInStockList")
+    public R<PageInfo<StorageListVO>> detailInStockList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<StorageListVO> items = approvalApplicationStorageService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "资产入库审批详情")
+    @GetMapping(value = "/detailInStock")
+    public R<StorageDetailVO> detailInStock(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationStorage approvalApplicationStorage = approvalApplicationStorageService.lambdaQuery()
+                .eq(OaApprovalApplicationStorage::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        StorageDetailVO res = new StorageDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.IN_STOCK.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setTitle(approvalApplicationStorage.getTitle());
+        res.setStorageType(approvalApplicationStorage.getStorageType());
+        res.setStorageTime(approvalApplicationStorage.getStorageTime());
+        res.setRemarks(approvalApplicationStorage.getTitle());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "物品借用-借用资产列表")
+    @PostMapping(value = "/detailBurrowList")
+    public R<PageInfo<GrabListVO>> detailBurrowList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "物品借用审批详情")
+    @GetMapping(value = "/detailBurrow")
+    public R<BorrowDetailVO> detailBurrow(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAsset approvalApplicationAsset = approvalApplicationAssetService.lambdaQuery()
+                .eq(OaApprovalApplicationAsset::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        BorrowDetailVO res = new BorrowDetailVO();
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BURROW.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setOperateTime(approvalApplicationAsset.getOperateTime());
+        res.setExpectReturnDate(approvalApplicationAsset.getExpectReturnDate());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "物品借用归还-归还资产列表")
+    @PostMapping(value = "/detailBackList")
+    public R<PageInfo<GrabListVO>> detailBackList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "物品借用归还审批详情")
+    @GetMapping(value = "/detailBack")
+    public R<BackDetailVO> detailBack(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplicationsBack = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAsset approvalApplicationAssetBack = approvalApplicationAssetService.lambdaQuery()
+                .eq(OaApprovalApplicationAsset::getApprovalApplicationId, approvalApplicationsBack.getId())
+                .last("limit 1").one();
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalApplicationAssetBack.getBorrowApplicationId());
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplicationsBack.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        BackDetailVO res = new BackDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.RETURN.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplicationsBack.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplicationsBack.getId());
+        res.setApplicationReason(approvalApplicationsBack.getApplicationReason());
+        res.setAttachmentUrl(approvalApplicationsBack.getAttachmentUrl());
+        res.setOperateTime(approvalApplicationAssetBack.getOperateTime());
+        res.setExpectReturnDate(approvalApplicationAssetBack.getExpectReturnDate());
+        res.setTitle(approvalApplicationAssetBack.getTitle());
+        res.setApplicationCode(approvalApplications.getApplicationCode());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "资产处置-处置资产列表")
+    @PostMapping(value = "/detailDisposeList")
+    public R<PageInfo<GrabListVO>> detailDisposeList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "资产处置审批详情")
+    @GetMapping(value = "/detailDispose")
+    public R<DisposeDetailVO> detailDispose(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationDispose approvalApplicationDispose = approvalApplicationDisposeService.lambdaQuery()
+                .eq(OaApprovalApplicationDispose::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        DisposeDetailVO res = new DisposeDetailVO();
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ASSET_DISPOSE.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+
+        res.setDisposeTime(approvalApplicationDispose.getDisposeTime());
+        res.setTitle(approvalApplicationDispose.getTitle());
+        AssetType assetType = assetTypeService.getById(approvalApplicationDispose.getAssetTypeId());
+        if (assetType!=null){
+            res.setAssetTypeName(assetType.getTypeName());
+        }
+        res.setDisposeType(approvalApplicationDispose.getDisposeType());
+        res.setDisposeTotalAmount(approvalApplicationDispose.getDisposeTotalAmount());
+        return R.ok(res);
+    }
+
+    @ApiOperation(value = "资产变更-变更资产列表")
+    @PostMapping(value = "/detailChangeList")
+    public R<PageInfo<GrabListVO>> detailChangeList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "资产变更审批详情")
+    @GetMapping(value = "/detailChange")
+    public R<ChangeDetailVO> detailChange(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationChange approvalApplicationChange = approvalApplicationChangeService.lambdaQuery()
+                .eq(OaApprovalApplicationChange::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        ChangeDetailVO res = new ChangeDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ASSET_CHANGE.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        AssetType assetType = assetTypeService.getById(approvalApplicationChange.getAssetTypeId());
+        if (assetType!=null){
+            res.setAssetTypeName(assetType.getTypeName());
+        }
+        res.setChangeTime(approvalApplicationChange.getChangeTime());
+        res.setTitle(approvalApplicationChange.getTitle());
+        TDept dept = deptService.getById(approvalApplicationChange.getOwnershipDeptId());
+        if (dept!=null){
+            res.setOwnershipDeptName(dept.getDeptName());
+        }
+        // todo 三阶段完善 仓库名称
+        res.setWarehouseName("三阶段完善");
+        res.setAddress(approvalApplicationChange.getAddress());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "报销申请审批详情")
+    @GetMapping(value = "/detailReimbursement")
+    public R<ReimbursementDetailVO> detailReimbursement(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationReimbursement approvalApplicationReimbursement = approvalApplicationReimbursementService.lambdaQuery()
+                .eq(OaApprovalApplicationReimbursement::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalApplicationReimbursementItem> oaApprovalApplicationReimbursementItems = approvalApplicationReimbursementItemService.lambdaQuery()
+                .eq(OaApprovalApplicationReimbursementItem::getApprovalApplicationId, approvalApplications.getId())
+                .list();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        ReimbursementDetailVO res = new ReimbursementDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.REIMBURSEMENT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+
+        res.setType(approvalApplicationReimbursement.getType());
+        res.setApprovalApplicationReimbursementItems(oaApprovalApplicationReimbursementItems);
+        return R.ok(res);
+    }
+    @ApiOperation(value = "款项申请审批详情")
+    @GetMapping(value = "/detailMoney")
+    public R<MoneyDetailVO> detailMoney(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationMoney approvalApplicationMoney = approvalApplicationMoneyService.lambdaQuery()
+                .eq(OaApprovalApplicationMoney::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        MoneyDetailVO res = new MoneyDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.MONEY.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setProjectName(approvalApplicationMoney.getProjectName());
+        res.setApplyAmount(approvalApplicationMoney.getApplyAmount());
+        res.setDescription(approvalApplicationMoney.getDescription());
+        res.setPayer(approvalApplicationMoney.getPayer());
+        res.setPayee(approvalApplicationMoney.getPayee());
+        res.setPayeeContact(approvalApplicationMoney.getPayeeContact());
+        res.setPayeeAccount(approvalApplicationMoney.getPayeeAccount());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "内部联系单审批详情")
+    @GetMapping(value = "/detailContact")
+    public R<ContactDetailVO> detailContact(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationMoney approvalApplicationMoney = approvalApplicationMoneyService.lambdaQuery()
+                .eq(OaApprovalApplicationMoney::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        ContactDetailVO res = new ContactDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTACT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setDescription(approvalApplicationMoney.getDescription());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "广告制作审批详情")
+    @GetMapping(value = "/detailAdvertisement")
+    public R<AdvertisementDetailVO> detailAdvertisement(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAdvertisement applicationAdvertisement = approvalApplicationAdvertisementService.lambdaQuery()
+                .eq(OaApprovalApplicationAdvertisement::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        AdvertisementDetailVO res = new AdvertisementDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ADVERTISEMENT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setTitle(applicationAdvertisement.getTitle());
+        res.setCreateTime(approvalApplications.getCreateTime());
+        res.setContent(applicationAdvertisement.getContent());
+        res.setNumber(applicationAdvertisement.getNumber());
+        res.setTotalAmount(applicationAdvertisement.getTotalAmount());
+        res.setSpec(applicationAdvertisement.getSpec());
+        return R.ok(res);
+    }
+    private List<ApprovalFlowNodeListVO> getFlowNodeList(SysUser sysUser, 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("发起");
+        if (sysUser!=null){
+            approvalFlowNodeListVO.setUserName(sysUser.getUserName());
+        }
+        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);
+        }
+        return approvalFlowNodeListVOS;
+    }
 
 
 
@@ -92,6 +1007,7 @@
     @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();
@@ -128,18 +1044,51 @@
         approvalFlowAudit.setReason(dto.getReason());
         approvalFlowAuditService.save(approvalFlowAudit);
         List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery().eq(OaApprovalFlowNode::getApprovalId, approval.getId())
-                .orderByDesc(OaApprovalFlowNode::getSortOrder).list();
+                .orderByAsc(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;
+            // 判断当前是否处于最后一个节点
+            if(approvalApplications.getCurrentFlowNodeId().equals(approvalFlowNodes.get(approvalFlowNodes.size()-1).getId())){
+                // 审批通过 审批流程结束
+                approvalApplications.setApprovalStatus(2);
+                approvalApplicationsService.updateById(approvalApplications);
+                if (approval.getApprovalCategory()==10||approval.getApprovalCategory()==7
+                        ||approval.getApprovalCategory()==8||approval.getApprovalCategory()==9){
+                    List<OaApprovalApplicationAssetItem> approvalApplicationAssetItems = approvalApplicationAssetItemService.lambdaQuery()
+                            .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, approvalApplications.getId()).list();
+                    List<Integer> AssetMainIds = approvalApplicationAssetItems.stream().map(OaApprovalApplicationAssetItem::getAssetMainId).collect(Collectors.toList());
+                    List<AssetMain> assetMains = assetMainService.lambdaQuery().in(AssetMain::getId, AssetMainIds).list();
+                    switch (approval.getApprovalCategory()){
+                        case 10:
+                            assetMains.forEach(assetMain -> {
+                                assetMain.setDisposed(1);
+                            });
+                            break;
+                        case 7:
+                            assetMains.forEach(assetMain -> {
+                                assetMain.setInUse(1);
+                            });
+                            break;
+                        default:
+                            assetMains.forEach(assetMain -> {
+                                assetMain.setBorrowed(1);
+                            });
+                            break;
+                    }
+                    assetMainService.updateBatchById(assetMains);
+                }
+            }else{
+                // 生成下一个节点的待办事项
+                for (int i = 0; i < approvalFlowNodes.size(); i++) {
+                    if(approvalApplications.getCurrentFlowNodeId()
+                            .equals(approvalFlowNodes.get(i).getId())){
+                        approvalApplications.setCurrentFlowNodeId(approvalFlowNodes.get(i+1).getId());
+                        OaApprovalFlowNode oaApprovalFlowNode1 = approvalFlowNodeService.getById(approvalFlowNodes.get(i + 1).getId());
+                        approvalTodoService.createApprovalTodos(approvalApplications.getId(),
+                                approvalApplications.getApplicationCode(), oaApprovalFlowNode1, approvalApplications.getDeptId());
+                    }
                 }
             }
+
         }
 
         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 f6309e8..24058d2 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
@@ -10,12 +10,11 @@
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.emums.ApprovalTypeEnum;
 import com.ruoyi.system.model.*;
+import com.ruoyi.system.query.ApprovalDetailQuery;
 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.*;
 import com.ruoyi.system.vo.system.NotificationVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
@@ -50,6 +49,8 @@
     private OaApprovalApplicationStorageService approvalApplicationStorageService;
     @Resource
     private OaApprovalApplicationPurchaseService approvalApplicationPurchaseService;
+    @Resource
+    private OaApprovalApplicationPurchaseItemService approvalApplicationPurchaseItemService;
     @Resource
     private OaApprovalApplicationAssetItemService approvalApplicationAssetItemService;
     @Resource
@@ -90,32 +91,12 @@
     @Resource
     private TDeptService deptService;
     @Resource
+    private AssetTypeService assetTypeService;
+    @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("待办事项列表")
@@ -304,7 +285,7 @@
 
     @ApiOperation(value = "合同文件审批详情")
     @GetMapping(value = "/detailContract")
-    public R<ContractDetailVO> detailContract(@ApiParam("待办列表id") Integer id) {
+    public R<ContractDetailVO> detailContract(@ApiParam("待办事项id")Integer id) {
         OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
         OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
         OaApprovalApplicationContract approvalApplicationContract = approvalApplicationContractService.lambdaQuery()
@@ -318,7 +299,15 @@
                 .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTRACT.getCode())
                 .orderByAsc(OaApprovalFlowNode::getSortOrder)
                 .eq(OaApprovalFlowNode::getStatus, 1).list();
-        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(approvalApplications, res, approvalFlowAudits,approvalFlowNodes);
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList( sysUser, approvalFlowAudits,approvalFlowNodes);
         res.setApprovalFlowNodeListVOS(flowNodeList);
         res.setApprovalApplicationId(approvalApplications.getId());
         res.setContractUrl(approvalApplicationContract.getContractUrl());
@@ -328,43 +317,671 @@
     }
     @ApiOperation(value = "进度款支付审批详情")
     @GetMapping(value = "/detailPayment")
-    public R<ContractDetailVO> detailPayment(@ApiParam("待办列表id") Integer id) {
+    public R<PaymentDetailVO> 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())
+        OaApprovalApplicationPayment approvalApplicationPayment = approvalApplicationPaymentService.lambdaQuery()
+                .eq(OaApprovalApplicationPayment::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();
+        PaymentDetailVO res = new PaymentDetailVO();
         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);
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
         res.setApprovalFlowNodeListVOS(flowNodeList);
         res.setApprovalApplicationId(approvalApplications.getId());
-        res.setContractUrl(approvalApplicationContract.getContractUrl());
         res.setApplicationReason(approvalApplications.getApplicationReason());
         res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        // todo 三阶段设计项目表之后完善
+        res.setProjectName("本期还未涉及到项目");
+        res.setApplyAmount(approvalApplicationPayment.getApplyAmount());
         return R.ok(res);
     }
-    private List<ApprovalFlowNodeListVO> getFlowNodeList(OaApprovalApplications approvalApplications, ContractDetailVO res, List<OaApprovalFlowAudit> approvalFlowAudits
+    @ApiOperation(value = "请假申请审批详情")
+    @GetMapping(value = "/detailLeave")
+    public R<LeaveDetailVO> detailLeave(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        LeaveDetailVO res = new LeaveDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setStartTime(approvalApplicationAttendance.getStartTime());
+        res.setEndTime(approvalApplicationAttendance.getEndTime());
+        res.setDuration(approvalApplicationAttendance.getDuration());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "销假审批详情")
+    @GetMapping(value = "/detailLeaveDestroy")
+    public R<LeaveDestroyDetailVO> detailLeaveDestroy(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        OaApprovalApplicationAttendance leaveApplication = approvalApplicationAttendanceService.getById(approvalApplicationAttendance.getLeaveApprovalApplicationId());
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        LeaveDestroyDetailVO res = new LeaveDestroyDetailVO();
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE_DESTROY.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setStartTime(approvalApplicationAttendance.getStartTime());
+        res.setEndTime(approvalApplicationAttendance.getEndTime());
+        res.setStartTimeLeave(leaveApplication.getStartTime());
+        res.setEndTimeLeave(leaveApplication.getEndTime());
+        res.setDurationLeave(leaveApplication.getDuration());
+        res.setDuration(approvalApplicationAttendance.getDuration());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "外出申请审批详情")
+    @GetMapping(value = "/detailOut")
+    public R<OutDetailVO> detailOut(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        OutDetailVO res = new OutDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.OUT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setStartTime(approvalApplicationAttendance.getStartTime());
+        res.setEndTime(approvalApplicationAttendance.getEndTime());
+        res.setDuration(approvalApplicationAttendance.getDuration());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "出差审批详情")
+    @GetMapping(value = "/detailBusinessTrip")
+    public R<BusinessTripDetailVO> detailBusinessTrip(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        BusinessTripDetailVO res = new BusinessTripDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BUSINESS_TRIP.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setStartTime(approvalApplicationAttendance.getStartTime());
+        res.setEndTime(approvalApplicationAttendance.getEndTime());
+        res.setDuration(approvalApplicationAttendance.getDuration());
+        res.setAddress(approvalApplicationAttendance.getAddress());
+        res.setProjectName(approvalApplicationAttendance.getProjectName());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "采购审批详情-采购物品清单")
+    @PostMapping(value = "/detailPurchaseList")
+    public R<PageInfo<PurchaseListVO>> detailPurchaseList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<PurchaseListVO> items = approvalApplicationPurchaseItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "采购审批详情")
+    @GetMapping(value = "/detailPurchase")
+    public R<PurchaseDetailVO> detailPurchase(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationPurchase approvalApplicationPurchase = approvalApplicationPurchaseService.lambdaQuery()
+                .eq(OaApprovalApplicationPurchase::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        PurchaseDetailVO res = new PurchaseDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PURCHASE.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setCreateTime(approvalApplications.getCreateTime());
+        res.setTotalAmount(approvalApplicationPurchase.getTotalAmount());
+        res.setTitle(approvalApplicationPurchase.getTitle());
+        AssetType assetType = assetTypeService.getById(approvalApplicationPurchase.getAssetTypeId());
+        if (assetType!=null){
+            res.setAssetTypeName(assetType.getTypeName());
+        }
+        return R.ok(res);
+    }
+    @ApiOperation(value = "物品领用-领用资产列表")
+    @PostMapping(value = "/detailGrabList")
+    public R<PageInfo<GrabListVO>> detailGrabList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "物品领用审批详情")
+    @GetMapping(value = "/detailGrab")
+    public R<GrabDetailVO> detailGrab(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAsset approvalApplicationAsset = approvalApplicationAssetService.lambdaQuery()
+                .eq(OaApprovalApplicationAsset::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        GrabDetailVO res = new GrabDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.GRAB.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setOperateTime(approvalApplicationAsset.getOperateTime());
+        res.setTitle(approvalApplicationAsset.getTitle());
+        AssetType assetType = assetTypeService.getById(approvalApplicationAsset.getAssetTypeId());
+        if (assetType!=null){
+            res.setAssetTypeName(assetType.getTypeName());
+        }
+        return R.ok(res);
+    }
+    @ApiOperation(value = "资产入库-入库资产列表")
+    @PostMapping(value = "/detailInStockList")
+    public R<PageInfo<StorageListVO>> detailInStockList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<StorageListVO> items = approvalApplicationStorageService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "资产入库审批详情")
+    @GetMapping(value = "/detailInStock")
+    public R<StorageDetailVO> detailInStock(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationStorage approvalApplicationStorage = approvalApplicationStorageService.lambdaQuery()
+                .eq(OaApprovalApplicationStorage::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        StorageDetailVO res = new StorageDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.IN_STOCK.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setTitle(approvalApplicationStorage.getTitle());
+        res.setStorageType(approvalApplicationStorage.getStorageType());
+        res.setStorageTime(approvalApplicationStorage.getStorageTime());
+        res.setRemarks(approvalApplicationStorage.getTitle());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "物品借用-借用资产列表")
+    @PostMapping(value = "/detailBurrowList")
+    public R<PageInfo<GrabListVO>> detailBurrowList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "物品借用审批详情")
+    @GetMapping(value = "/detailBurrow")
+    public R<BorrowDetailVO> detailBurrow(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAsset approvalApplicationAsset = approvalApplicationAssetService.lambdaQuery()
+                .eq(OaApprovalApplicationAsset::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        BorrowDetailVO res = new BorrowDetailVO();
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BURROW.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setOperateTime(approvalApplicationAsset.getOperateTime());
+        res.setExpectReturnDate(approvalApplicationAsset.getExpectReturnDate());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "物品借用归还-归还资产列表")
+    @PostMapping(value = "/detailBackList")
+    public R<PageInfo<GrabListVO>> detailBackList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "物品借用归还审批详情")
+    @GetMapping(value = "/detailBack")
+    public R<BackDetailVO> detailBack(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplicationsBack = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAsset approvalApplicationAssetBack = approvalApplicationAssetService.lambdaQuery()
+                .eq(OaApprovalApplicationAsset::getApprovalApplicationId, approvalApplicationsBack.getId())
+                .last("limit 1").one();
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalApplicationAssetBack.getBorrowApplicationId());
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplicationsBack.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        BackDetailVO res = new BackDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.RETURN.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplicationsBack.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplicationsBack.getId());
+        res.setApplicationReason(approvalApplicationsBack.getApplicationReason());
+        res.setAttachmentUrl(approvalApplicationsBack.getAttachmentUrl());
+        res.setOperateTime(approvalApplicationAssetBack.getOperateTime());
+        res.setExpectReturnDate(approvalApplicationAssetBack.getExpectReturnDate());
+        res.setTitle(approvalApplicationAssetBack.getTitle());
+        res.setApplicationCode(approvalApplications.getApplicationCode());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "资产处置-处置资产列表")
+    @PostMapping(value = "/detailDisposeList")
+    public R<PageInfo<GrabListVO>> detailDisposeList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "资产处置审批详情")
+    @GetMapping(value = "/detailDispose")
+    public R<DisposeDetailVO> detailDispose(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationDispose approvalApplicationDispose = approvalApplicationDisposeService.lambdaQuery()
+                .eq(OaApprovalApplicationDispose::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        DisposeDetailVO res = new DisposeDetailVO();
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ASSET_DISPOSE.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+
+        res.setDisposeTime(approvalApplicationDispose.getDisposeTime());
+        res.setTitle(approvalApplicationDispose.getTitle());
+        AssetType assetType = assetTypeService.getById(approvalApplicationDispose.getAssetTypeId());
+        if (assetType!=null){
+            res.setAssetTypeName(assetType.getTypeName());
+        }
+        res.setDisposeType(approvalApplicationDispose.getDisposeType());
+        res.setDisposeTotalAmount(approvalApplicationDispose.getDisposeTotalAmount());
+        return R.ok(res);
+    }
+
+    @ApiOperation(value = "资产变更-变更资产列表")
+    @PostMapping(value = "/detailChangeList")
+    public R<PageInfo<GrabListVO>> detailChangeList(@RequestBody ApprovalDetailQuery query) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(query.getId());
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        query.setId(approvalApplications.getId());
+        PageInfo<GrabListVO> items = approvalApplicationAssetItemService.pageList(query);
+        return R.ok(items);
+    }
+    @ApiOperation(value = "资产变更审批详情")
+    @GetMapping(value = "/detailChange")
+    public R<ChangeDetailVO> detailChange(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationChange approvalApplicationChange = approvalApplicationChangeService.lambdaQuery()
+                .eq(OaApprovalApplicationChange::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        ChangeDetailVO res = new ChangeDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ASSET_CHANGE.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        AssetType assetType = assetTypeService.getById(approvalApplicationChange.getAssetTypeId());
+        if (assetType!=null){
+            res.setAssetTypeName(assetType.getTypeName());
+        }
+        res.setChangeTime(approvalApplicationChange.getChangeTime());
+        res.setTitle(approvalApplicationChange.getTitle());
+        TDept dept = deptService.getById(approvalApplicationChange.getOwnershipDeptId());
+        if (dept!=null){
+            res.setOwnershipDeptName(dept.getDeptName());
+        }
+        // todo 三阶段完善 仓库名称
+        res.setWarehouseName("三阶段完善");
+        res.setAddress(approvalApplicationChange.getAddress());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "报销申请审批详情")
+    @GetMapping(value = "/detailReimbursement")
+    public R<ReimbursementDetailVO> detailReimbursement(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationReimbursement approvalApplicationReimbursement = approvalApplicationReimbursementService.lambdaQuery()
+                .eq(OaApprovalApplicationReimbursement::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalApplicationReimbursementItem> oaApprovalApplicationReimbursementItems = approvalApplicationReimbursementItemService.lambdaQuery()
+                .eq(OaApprovalApplicationReimbursementItem::getApprovalApplicationId, approvalApplications.getId())
+                .list();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        ReimbursementDetailVO res = new ReimbursementDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.REIMBURSEMENT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+
+        res.setType(approvalApplicationReimbursement.getType());
+        res.setApprovalApplicationReimbursementItems(oaApprovalApplicationReimbursementItems);
+        return R.ok(res);
+    }
+    @ApiOperation(value = "款项申请审批详情")
+    @GetMapping(value = "/detailMoney")
+    public R<MoneyDetailVO> detailMoney(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationMoney approvalApplicationMoney = approvalApplicationMoneyService.lambdaQuery()
+                .eq(OaApprovalApplicationMoney::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        MoneyDetailVO res = new MoneyDetailVO();
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.MONEY.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setProjectName(approvalApplicationMoney.getProjectName());
+        res.setApplyAmount(approvalApplicationMoney.getApplyAmount());
+        res.setDescription(approvalApplicationMoney.getDescription());
+        res.setPayer(approvalApplicationMoney.getPayer());
+        res.setPayee(approvalApplicationMoney.getPayee());
+        res.setPayeeContact(approvalApplicationMoney.getPayeeContact());
+        res.setPayeeAccount(approvalApplicationMoney.getPayeeAccount());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "内部联系单审批详情")
+    @GetMapping(value = "/detailContact")
+    public R<ContactDetailVO> detailContact(@ApiParam("待办事项id")Integer id) {
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationMoney approvalApplicationMoney = approvalApplicationMoneyService.lambdaQuery()
+                .eq(OaApprovalApplicationMoney::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        ContactDetailVO res = new ContactDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTACT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setDescription(approvalApplicationMoney.getDescription());
+        return R.ok(res);
+    }
+    @ApiOperation(value = "广告制作审批详情")
+    @GetMapping(value = "/detailAdvertisement")
+    public R<AdvertisementDetailVO> detailAdvertisement(@ApiParam("待办事项id")Integer id) {
+
+        OaApprovalTodo approvalTodo = approvalTodoService.getById(id);
+        OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId());
+        OaApprovalApplicationAdvertisement applicationAdvertisement = approvalApplicationAdvertisementService.lambdaQuery()
+                .eq(OaApprovalApplicationAdvertisement::getApprovalApplicationId, approvalApplications.getId())
+                .last("limit 1").one();
+
+        List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
+                .orderByAsc(OaApprovalFlowAudit::getSortOrder)
+                .list();
+        AdvertisementDetailVO res = new AdvertisementDetailVO();
+
+
+        List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
+                .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ADVERTISEMENT.getCode())
+                .orderByAsc(OaApprovalFlowNode::getSortOrder)
+                .eq(OaApprovalFlowNode::getStatus, 1).list();
+        SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
+        if (sysUser!=null){
+            res.setUserName(sysUser.getUserName());
+            TDept dept = deptService.getById(sysUser.getDeptId());
+            if (dept!=null){
+                res.setDeptName(dept.getDeptName());
+            }
+        }
+        List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setApprovalFlowNodeListVOS(flowNodeList);
+        res.setApprovalApplicationId(approvalApplications.getId());
+        res.setApplicationReason(approvalApplications.getApplicationReason());
+        res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
+        res.setTitle(applicationAdvertisement.getTitle());
+        res.setCreateTime(approvalApplications.getCreateTime());
+        res.setContent(applicationAdvertisement.getContent());
+        res.setNumber(applicationAdvertisement.getNumber());
+        res.setTotalAmount(applicationAdvertisement.getTotalAmount());
+        res.setSpec(applicationAdvertisement.getSpec());
+        return R.ok(res);
+    }
+    private List<ApprovalFlowNodeListVO> getFlowNodeList(SysUser sysUser, 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) {
@@ -379,15 +996,6 @@
             }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/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
index 6274fbf..5fa85d2 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -25,7 +25,9 @@
 import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.system.SysUserVO;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -77,6 +79,18 @@
         return AjaxResult.success(list);
     }
 
+    /**
+     * 获取用户列表
+     */
+    @ApiOperation(value = "根据部门id获取用户列表")
+    @GetMapping("/listByDeptId")
+    public AjaxResult<PageInfo<SysUserVO>> listByDeptId(@ApiParam(value = "部门id")Integer deptId,
+                                                        @ApiParam(value = "分页参数,当前页码")
+                                                         Integer pageNum,
+                                                        @ApiParam(value = "分页参数,每页数量,默认为10") Integer pageSize ) {
+        PageInfo<SysUserVO> list = userService.listByDeptId(deptId,pageNum,pageSize);
+        return AjaxResult.success(list);
+    }
     @ApiOperation(value = "获取用户列表-不分页")
     @PostMapping("/listNotPage")
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetItemMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetItemMapper.java
index e2a8873..5314d07 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetItemMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationAssetItemMapper.java
@@ -1,7 +1,13 @@
 package com.ruoyi.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
+import com.ruoyi.system.query.ApprovalDetailQuery;
+import com.ruoyi.system.vo.GrabListVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,5 @@
  */
 public interface OaApprovalApplicationAssetItemMapper extends BaseMapper<OaApprovalApplicationAssetItem> {
 
+    List<GrabListVO> pageList(@Param("query")ApprovalDetailQuery query, @Param("pageInfo")PageInfo<GrabListVO> pageInfo);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationPurchaseItemMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationPurchaseItemMapper.java
index 9002a06..93bf825 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationPurchaseItemMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationPurchaseItemMapper.java
@@ -1,7 +1,13 @@
 package com.ruoyi.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.model.OaApprovalApplicationPurchaseItem;
+import com.ruoyi.system.query.ApprovalDetailQuery;
+import com.ruoyi.system.vo.PurchaseListVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,5 @@
  */
 public interface OaApprovalApplicationPurchaseItemMapper extends BaseMapper<OaApprovalApplicationPurchaseItem> {
 
+    List<PurchaseListVO> pageList(@Param("query")ApprovalDetailQuery query, @Param("pageInfo")PageInfo<PurchaseListVO> pageInfo);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationStorageMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationStorageMapper.java
index b48ae0d..f30818d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationStorageMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalApplicationStorageMapper.java
@@ -3,10 +3,15 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.model.OaApprovalApplicationStorage;
+import com.ruoyi.system.query.ApprovalDetailQuery;
 import com.ruoyi.system.query.OaApprovalApplicationStoragePageQuery;
+import com.ruoyi.system.vo.StorageListVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePageVO;
 import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -25,4 +30,7 @@
      * @return 分页数据
      */
     IPage<OaApprovalApplicationStoragePageVO> selectApplicationStoragePage(Page<?> page, @Param("query") OaApprovalApplicationStoragePageQuery query);
+
+    List<StorageListVO> pageList(@Param("query")ApprovalDetailQuery query, @Param("pageInfo")PageInfo<StorageListVO> pageInfo);
+
 }
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 1d74359..8b638be 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
@@ -20,4 +20,6 @@
 
     List<OaApprovalTodo> pageList(@Param("query")ApprovalTodoListQuery query, @Param("pageInfo")PageInfo<OaApprovalTodo> pageInfo);
 
+    List<OaApprovalTodo> pageListAudit(@Param("query")ApprovalTodoListQuery query, @Param("pageInfo")PageInfo<OaApprovalTodo> pageInfo);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index 087dcd0..b0e5bb5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -213,4 +213,7 @@
      * @return
      */
     List<SysUser> selectListByUserIds(@Param("userIds") List<Integer> userIds);
+
+    List<SysUserVO> listByDeptId(@Param("deptId")Integer deptId,@Param("pageInfo") PageInfo<SysUserVO> pageInfo);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalDetailQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalDetailQuery.java
new file mode 100644
index 0000000..0e7fcf3
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalDetailQuery.java
@@ -0,0 +1,18 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "审批详情通用query")
+public class ApprovalDetailQuery extends BasePage {
+
+    @ApiModelProperty(value = "待办id")
+    private Integer id;
+
+    @ApiModelProperty(value = "申请单id 前端忽略")
+    private Integer approvalApplicationId;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 722cd55..55a5601 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -304,4 +304,6 @@
      * @return
      */
     List<SysUser> selectListByUserIds(List<Integer> userIds);
+
+    PageInfo<SysUserVO> listByDeptId(Integer deptId,Integer pageNum,Integer pageSize);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java
index 7a2fde6..3e5a129 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationAssetItemService.java
@@ -1,7 +1,10 @@
 package com.ruoyi.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
+import com.ruoyi.system.query.ApprovalDetailQuery;
+import com.ruoyi.system.vo.GrabListVO;
 
 /**
  * <p>
@@ -13,4 +16,5 @@
  */
 public interface OaApprovalApplicationAssetItemService extends IService<OaApprovalApplicationAssetItem> {
 
+    PageInfo<GrabListVO> pageList(ApprovalDetailQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationPurchaseItemService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationPurchaseItemService.java
index dd2f4cd..8775dc7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationPurchaseItemService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationPurchaseItemService.java
@@ -1,7 +1,10 @@
 package com.ruoyi.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.model.OaApprovalApplicationPurchaseItem;
+import com.ruoyi.system.query.ApprovalDetailQuery;
+import com.ruoyi.system.vo.PurchaseListVO;
 
 /**
  * <p>
@@ -13,4 +16,5 @@
  */
 public interface OaApprovalApplicationPurchaseItemService extends IService<OaApprovalApplicationPurchaseItem> {
 
+    PageInfo<PurchaseListVO> pageList(ApprovalDetailQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationStorageService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationStorageService.java
index 6ee3172..2df657c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationStorageService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalApplicationStorageService.java
@@ -2,11 +2,14 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.dto.asset.OaApprovalApplicationStorageGeneralDTO;
 import com.ruoyi.system.dto.asset.OaApprovalApplicationStoragePropertyDTO;
 import com.ruoyi.system.dto.asset.OaApprovalApplicationStorageVehicleDTO;
 import com.ruoyi.system.model.OaApprovalApplicationStorage;
+import com.ruoyi.system.query.ApprovalDetailQuery;
 import com.ruoyi.system.query.OaApprovalApplicationStoragePageQuery;
+import com.ruoyi.system.vo.StorageListVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePageVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStorageGeneralDetailVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePropertyDetailVO;
@@ -67,4 +70,6 @@
      * @param storageId 入库申请存储表ID
      */
     OaApprovalApplicationStorageVehicleDetailVO getVehicleDetail(Integer storageId);
+
+    PageInfo<StorageListVO> pageList(ApprovalDetailQuery query);
 }
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 909fea6..6d4a31e 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
@@ -30,4 +30,6 @@
 
 
     PageInfo<OaApprovalTodo> pageList(ApprovalTodoListQuery query);
+
+    PageInfo<OaApprovalTodo> pageListAudit(ApprovalTodoListQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java
index bd70451..b307d20 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetItemServiceImpl.java
@@ -1,10 +1,16 @@
 package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.mapper.OaApprovalApplicationAssetItemMapper;
 import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
+import com.ruoyi.system.query.ApprovalDetailQuery;
 import com.ruoyi.system.service.OaApprovalApplicationAssetItemService;
+import com.ruoyi.system.vo.GrabListVO;
+import com.ruoyi.system.vo.PurchaseListVO;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +23,11 @@
 @Service
 public class OaApprovalApplicationAssetItemServiceImpl extends ServiceImpl<OaApprovalApplicationAssetItemMapper, OaApprovalApplicationAssetItem> implements OaApprovalApplicationAssetItemService {
 
+    @Override
+    public PageInfo<GrabListVO> pageList(ApprovalDetailQuery query) {
+        PageInfo<GrabListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        List<GrabListVO> list = this.baseMapper.pageList(query,pageInfo);
+        pageInfo.setRecords(list);
+        return pageInfo;
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseItemServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseItemServiceImpl.java
index 3622fd8..91fbb33 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseItemServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationPurchaseItemServiceImpl.java
@@ -1,10 +1,16 @@
 package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.mapper.OaApprovalApplicationPurchaseItemMapper;
 import com.ruoyi.system.model.OaApprovalApplicationPurchaseItem;
+import com.ruoyi.system.query.ApprovalDetailQuery;
 import com.ruoyi.system.service.OaApprovalApplicationPurchaseItemService;
+import com.ruoyi.system.vo.PurchaseListVO;
+import com.ruoyi.system.vo.system.NotificationVO;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +23,11 @@
 @Service
 public class OaApprovalApplicationPurchaseItemServiceImpl extends ServiceImpl<OaApprovalApplicationPurchaseItemMapper, OaApprovalApplicationPurchaseItem> implements OaApprovalApplicationPurchaseItemService {
 
+    @Override
+    public PageInfo<PurchaseListVO> pageList(ApprovalDetailQuery query) {
+        PageInfo<PurchaseListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        List<PurchaseListVO> list = this.baseMapper.pageList(query,pageInfo);
+        pageInfo.setRecords(list);
+        return pageInfo;
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java
index 6332ff5..5bfb9d1 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.common.core.domain.entity.TDept;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.system.dto.asset.OaApprovalApplicationStorageGeneralDTO;
@@ -20,6 +21,7 @@
 import com.ruoyi.system.model.OaApprovalApplicationStorageAssetVehicleExt;
 import com.ruoyi.system.model.OaApprovalApplications;
 import com.ruoyi.system.model.OaApprovalFlowNode;
+import com.ruoyi.system.query.ApprovalDetailQuery;
 import com.ruoyi.system.query.OaApprovalApplicationStoragePageQuery;
 import com.ruoyi.system.service.AssetMainService;
 import com.ruoyi.system.service.AssetPropertyExtService;
@@ -34,6 +36,8 @@
 import com.ruoyi.system.service.OaApprovalFlowNodeService;
 import com.ruoyi.system.service.OaApprovalTodoService;
 import com.ruoyi.system.service.TDeptService;
+import com.ruoyi.system.vo.PurchaseListVO;
+import com.ruoyi.system.vo.StorageListVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStorageGeneralDetailVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePageVO;
 import com.ruoyi.system.vo.asset.OaApprovalApplicationStoragePropertyDetailVO;
@@ -809,4 +813,12 @@
             v.setAddress(sample.getAddress());
         }
     }
+
+    @Override
+    public PageInfo<StorageListVO> pageList(ApprovalDetailQuery query) {
+        PageInfo<StorageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        List<StorageListVO> list = this.baseMapper.pageList(query,pageInfo);
+        pageInfo.setRecords(list);
+        return pageInfo;
+    }
 }
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 da7af41..c803e68 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
@@ -77,6 +77,14 @@
         return pageInfo;
     }
 
+    @Override
+    public PageInfo<OaApprovalTodo> pageListAudit(ApprovalTodoListQuery query) {
+        PageInfo<OaApprovalTodo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        List<OaApprovalTodo> list = this.baseMapper.pageListAudit(query,pageInfo);
+        pageInfo.setRecords( list);
+        return pageInfo;
+    }
+
 
     /**
      * 创建上级部门审批待办
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 201d591..9551192 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -5,6 +5,7 @@
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysRole;
 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.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -13,11 +14,7 @@
 import com.ruoyi.system.domain.SysPost;
 import com.ruoyi.system.domain.SysUserPost;
 import com.ruoyi.system.domain.SysUserRole;
-import com.ruoyi.system.mapper.SysPostMapper;
-import com.ruoyi.system.mapper.SysRoleMapper;
-import com.ruoyi.system.mapper.SysUserMapper;
-import com.ruoyi.system.mapper.SysUserPostMapper;
-import com.ruoyi.system.mapper.SysUserRoleMapper;
+import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.query.SysUserQuery;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
@@ -32,6 +29,7 @@
 import javax.validation.Validator;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -47,6 +45,8 @@
 
     @Autowired
     private SysUserMapper userMapper;
+    @Autowired
+    private TDeptMapper deptMapper;
 
     @Autowired
     private SysRoleMapper roleMapper;
@@ -643,6 +643,23 @@
         if(CollectionUtils.isEmpty(list)){
             return pageInfo;
         }
+        Map<Integer, TDept> deptMap = deptMapper.selectList(null).stream()
+                .collect(Collectors.toMap(TDept::getId, e->e));
+        for (SysUserVO sysUserVO : list) {
+            StringBuilder deptName = new StringBuilder();
+            TDept tDept = deptMap.get(Integer.valueOf(sysUserVO.getDeptId()));
+            if (tDept!=null){
+                deptName.append(tDept.getDeptName());
+                while (tDept.getParentId()!=0){
+                    tDept = deptMap.get(tDept.getParentId());
+                    if (tDept!=null){
+                        deptName.append("-").append(tDept.getDeptName());
+                    }else{
+                        break;
+                    }
+                }
+            }
+        }
         pageInfo.setRecords(list);
         return pageInfo;
     }
@@ -706,4 +723,34 @@
     public List<SysUser> selectListByUserIds(List<Integer> userIds) {
         return userMapper.selectListByUserIds(userIds);
     }
+
+    @Override
+    public PageInfo<SysUserVO> listByDeptId(Integer deptId, Integer pageNum, Integer pageSize) {
+        PageInfo<SysUserVO> pageInfo = new PageInfo<>(pageNum, pageSize);
+        List<SysUserVO> list = userMapper.listByDeptId(deptId,pageInfo);
+        if(CollectionUtils.isEmpty(list)){
+            return pageInfo;
+        }
+        Map<Integer, TDept> deptMap = deptMapper.selectList(null).stream()
+                .collect(Collectors.toMap(TDept::getId, e->e));
+        for (SysUserVO sysUserVO : list) {
+            StringBuilder deptName = new StringBuilder();
+            TDept tDept = deptMap.get(Integer.valueOf(sysUserVO.getDeptId()));
+            if (tDept!=null){
+                deptName.append(tDept.getDeptName());
+                while (tDept.getParentId()!=0){
+                    tDept = deptMap.get(tDept.getParentId());
+                    if (tDept!=null){
+                        deptName.append("-").append(tDept.getDeptName());
+                    }else{
+                        break;
+                    }
+                }
+            }
+        }
+        pageInfo.setRecords(list);
+        return pageInfo;
+    }
+
+
 }
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
index 5081450..de63778 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java
@@ -41,7 +41,6 @@
     private Integer id;
     @ApiModelProperty(value = "审批申请ID")
     private Integer applicationId;
-
     @ApiModelProperty(value = "报销金额/申请金额/合计金额/总金额(报销申请/款项申请/款项支付审批/广告制作)")
     private BigDecimal amount;
     @ApiModelProperty(value = "入库类型 0-正常入库(资产入库)")
@@ -60,5 +59,7 @@
     private String description;
     @ApiModelProperty(value = "内容(广告制作)")
     private String content;
+    @ApiModelProperty(value = "审批状态 0-草稿,1-待审批,2-审批通过,3-审批拒绝 ,4-已撤回")
+    private Integer approvalStatus;
 
 }
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
index b39a4b0..8c71855 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java
@@ -36,8 +36,7 @@
     @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/BorrowDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java
index ef68812..b8648ae 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java
@@ -32,8 +32,7 @@
     @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/ChangeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java
index ffc479d..483fcc4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java
@@ -38,8 +38,7 @@
     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/DisposeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java
index aa2e520..f6d1476 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java
@@ -38,8 +38,7 @@
     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/GrabDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java
index a654cc3..bf48813 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java
@@ -33,8 +33,7 @@
     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/LeaveDestroyDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java
index 6a7d6f7..6cb5c14 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java
@@ -6,6 +6,7 @@
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -23,16 +24,22 @@
     private String attachmentUrl;
     @ApiModelProperty(value = "审批申请记录ID")
     private Integer approvalApplicationId;
-    @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-
+    @ApiModelProperty(value = "销假时间开始")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDateTime startTime;
-    @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-
+    @ApiModelProperty(value = "销假时间结束")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDateTime endTime;
-    @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
+    @ApiModelProperty(value = "销假时长(天)")
     private Double duration;
+    @ApiModelProperty(value = "关联请假开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDateTime startTimeLeave;
+    @ApiModelProperty(value = "关联请假结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDateTime endTimeLeave;
+    @ApiModelProperty(value = "关联请假请假时长(天)")
+    private Double durationLeave;
     @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
index 64e63b6..0bcef3c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java
@@ -34,8 +34,7 @@
     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/StorageDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java
index 6b333a3..651ec43 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java
@@ -24,7 +24,7 @@
     @ApiModelProperty(value = "标题")
     private String title;
     @ApiModelProperty(value = "入库类型 0-正常入库")
-    private Integer storageType;
+    private Boolean storageType;
     @ApiModelProperty(value = "入库日期")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDate storageTime;
@@ -32,7 +32,7 @@
     private String remarks;
 
     @ApiModelProperty(value = "采购物品清单")
-    private PageInfo<GrabListVO> grabListVOPageInfo;
+    private PageInfo<StorageListVO> 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
index 25cf045..109de45 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java
@@ -31,7 +31,6 @@
     @ApiModelProperty(value = "总价值(数量*单价)")
     private BigDecimal totalValue;
     @ApiModelProperty(value = "入账时间")
-    @TableField("accounting_date")
     private LocalDate accountingDate;
 
     @ApiModelProperty(value = "会计凭证号")
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetItemMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetItemMapper.xml
index 953c67c..36dddfb 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetItemMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetItemMapper.xml
@@ -4,14 +4,38 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.ruoyi.system.model.OaApprovalApplicationAssetItem">
-        <id column="id" property="id" />
-        <result column="approval_application_id" property="approvalApplicationId" />
-        <result column="asset_main_id" property="assetMainId" />
+        <id column="id" property="id"/>
+        <result column="approval_application_id" property="approvalApplicationId"/>
+        <result column="asset_main_id" property="assetMainId"/>
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, approval_application_id, asset_main_id
+        id
+        , approval_application_id, asset_main_id
     </sql>
+    <select id="pageList" resultType="com.ruoyi.system.vo.GrabListVO">
+        select t1.*,
+               t3.type_name    as assetTypeName,
+               t2.asset_name   as assetName,
+               t2.asset_code   as assetCode,
+               t4.dept_name    as ownershipDeptName,
+               t2.asset_status as assetStatus,
+               t5.storage_time as storageTime,
+               case
+                   when t2.use_dept_id is not null and t2.use_dept_id != '' then t6.dept_name
+                   when t2.address is not null and t2.address != '' then t2.address
+                   when t2.warehouse_name is not null and t2.warehouse_name != '' then t2.warehouse_name
+                   else null
+                   end as useName
+        from oa_approval_application_asset_item t1
+                 left join asset_main t2 on t2.id = t1.asset_main_id
+                 left join asset_type t3 on t3.id = t2.asset_type_id
+                 left join t_dept t4 on t4.id = t2.ownership_dept_id
+                 left join oa_approval_application_storage t5 on t5.approval_application_id = t1.approval_application_id
+                 left join t_dept t6 on t6.id = t2.use_dept_id
+        where t1.approval_application_id = #{query.approvalApplicationId}
+        order by t1.id  desc
+    </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml
index 8880cf9..2594ff7 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml
@@ -19,5 +19,12 @@
     <sql id="Base_Column_List">
         id, approval_application_id, asset_name, asset_type_id, spec, unit, quantity, price, total_amount
     </sql>
+    <select id="pageList" resultType="com.ruoyi.system.vo.PurchaseListVO">
+        select t1.*,t2.type_name as assetTypeName
+        from oa_approval_application_purchase_item t1
+                 left join asset_type t2 on t2.id = t1.asset_type_id
+        where t1.approval_application_id = #{query.approvalApplicationId}
+
+    </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml
index 119f496..be9dd4f 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationStorageMapper.xml
@@ -46,5 +46,23 @@
         </where>
         ORDER BY oas.storage_time DESC, oas.id DESC
     </select>
+    <select id="pageList" resultType="com.ruoyi.system.vo.StorageListVO">
+        select t1.*,t2.type_name    as assetTypeName,
+               case
+                   when t1.use_dept_id is not null and t1.use_dept_id != '' then t3.dept_name
+                   when t1.address is not null and t1.address != '' then t1.address
+                   when t1.warehouse_name is not null and t1.warehouse_name != '' then t1.warehouse_name
+                   else null
+                   end as useName
+
+
+               from asset_main t1
+                             left join asset_type t2 on t3.id = t1.asset_type_id
+                             left join t_dept t3 on t4.id = t3.ownership_dept_id
+        where t1.approval_application_id = #{query.approvalApplicationId}
+        order by t1.create_time  desc
+
+
+    </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml
index dccbb19..6bb5c05 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml
@@ -31,5 +31,15 @@
         group by application_id
         order by create_time desc
     </select>
+    <select id="pageListAudit" 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 = 1
+        group by application_id
+        order by create_time desc
+    </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index d0043e3..d960d8d 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -36,6 +36,7 @@
         <result property="remark"       column="remark"       />
         <result property="ifBlack"       column="ifBlack"       />
         <result property="roleName"       column="role_name"       />
+        <result property="deptName"       column="dept_name"       />
         <association property="dept"    javaType="SysDept"         resultMap="deptResult" />
         <collection  property="roles"   javaType="java.util.List"  resultMap="RoleResult" />
     </resultMap>
@@ -61,18 +62,18 @@
 	
 	<sql id="selectUserVo">
         select u.*,
-        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
+        d.id as deptId,d.dept_name ,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u
-		    left join sys_dept d on u.dept_id = d.dept_id
+		    left join t_dept d on u.dept_id = d.id
 		    left join sys_user_role ur on u.user_id = ur.user_id
 		    left join sys_role r on r.role_id = ur.role_id
     </sql>
     
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
 		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date,
-		       u.create_by, u.create_time, u.remark, d.dept_name, d.leader,u.code from sys_user u
-		left join sys_dept d on u.dept_id = d.dept_id
+		       u.create_by, u.create_time, u.remark, d.dept_name,u.code from sys_user u
+		left join t_dept d on u.dept_id = d.id
 		where u.del_flag = '0'
 		<if test="userId != null and userId != 0">
 			AND u.user_id = #{userId}
@@ -326,6 +327,20 @@
 			</if>
 		</where>
 	</select>
+	<select id="listByDeptId" resultType="com.ruoyi.system.vo.system.SysUserVO">
+		select u.*,
+		r.role_id AS roleId, r.role_name AS roleName, r.role_key AS roleKey, r.role_sort AS roleSort, r.data_scope AS dataScope, r.status as role_status
+		,t1.dept_name as deptName
+		from sys_user u
+		left join sys_user_role ur on u.user_id = ur.user_id
+		left join sys_role r on r.role_id = ur.role_id
+		LEFT JOIN t_dept t1 on t1.id = u.dept_id
+		WHERE u.del_flag = 0
+		<if test="deptId != null and query.deptId != ''">
+			AND u.dept_id LIKE concat('%',#{query.deptId},'%')
+		</if>
+		ORDER BY u.create_time DESC
+	</select>
 	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
  		insert into sys_user(
  			<if test="userId != null and userId != 0">user_id,</if>

--
Gitblit v1.7.1