From 853c8ba11072eae475273864e61733ae7294f004 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期四, 25 九月 2025 11:55:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java                              |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java                                      |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/AssetTypeService.java                             |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java                                     |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java                                   |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationStorageServiceImpl.java |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java                                        |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationPurchase.java                  |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java                               |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListDetailQuery.java                 |   22 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java                    |   70 +++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java             |   21 +
 ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java                          |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java                                      |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListQuery.java                       |   20 ++
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java                               |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetTypeMapper.java                               |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java                                      |    2 
 ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml                                |   22 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetStatisticsController.java                 |   58 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java                             |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java                                     |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java                                       |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java                                      |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java                                   |    2 
 ruoyi-system/src/main/resources/mapper/system/AssetTypeMapper.xml                                     |   35 +++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java                  |  117 ++++++++---
 ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java                                     |    2 
 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-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java          |   38 ++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java                             |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java                                   |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/AssetStatisticsVO.java                                 |   35 +++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java                                   |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java                                    |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java                                    |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java               |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java                              |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java                                  |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java               |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java                    |    2 
 42 files changed, 469 insertions(+), 76 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetStatisticsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetStatisticsController.java
new file mode 100644
index 0000000..a36fb7f
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetStatisticsController.java
@@ -0,0 +1,58 @@
+package com.ruoyi.web.controller.api;
+
+import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.dto.asset.AssetTypeDTO;
+import com.ruoyi.system.query.AssetStatisticsListQuery;
+import com.ruoyi.system.query.NotificationListQuery;
+import com.ruoyi.system.service.AssetTypeService;
+import com.ruoyi.system.vo.AssetStatisticsVO;
+import com.ruoyi.system.vo.asset.AssetTypeTreeVO;
+import com.ruoyi.system.vo.system.NotificationVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * <p>
+ * 资产类型表 前端控制器
+ * </p>
+ *
+ * @author WuGuanFengYue
+ * @since 2025-09-15
+ */
+@Api(tags = {"资产-资产汇总"})
+@Validated
+@RestController
+@RequestMapping("/asset-statistics")
+@RequiredArgsConstructor
+public class AssetStatisticsController {
+
+    private final AssetTypeService assetTypeService;
+
+    @ApiOperation("获取资产类型树形数据")
+    @GetMapping("/tree")
+    public R<List<AssetTypeTreeVO>> getAssetTypeTree() {
+        List<AssetTypeTreeVO> treeData = assetTypeService.getAssetTypeTree();
+        return R.ok(treeData);
+    }
+    @ApiOperation("资产汇总分页列表")
+    @PostMapping("/pageList")
+    public R<PageInfo<AssetStatisticsVO>> pageList(@RequestBody AssetStatisticsListQuery query) {
+        return R.ok(assetTypeService.pageList(query));
+    }
+    @ApiOperation("资产明细")
+    @PostMapping("/pageListDetail")
+    public R<PageInfo<AssetStatisticsVO>> pageListDetail(@RequestBody AssetStatisticsListQuery query) {
+        return R.ok(assetTypeService.pageList(query));
+    }
+
+    
+}
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
index 29b8690..42d146d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
@@ -48,12 +48,8 @@
 import com.ruoyi.system.utils.UUIDUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -108,6 +104,7 @@
     @Resource
     private OaApprovalTodoService oaApprovalTodoService;
     @Log(title = "审批-发起请假", businessType = BusinessType.INSERT)
+    @Transactional
     @ApiOperation(value = "发起请假")
     @PostMapping(value = "/addLeave")
     public R addLeave(@RequestBody AddLeaveDTO dto) {
@@ -176,6 +173,7 @@
     @Log(title = "审批-发起外出申请", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起外出申请")
     @PostMapping(value = "/addOut")
+    @Transactional
     public R addOut(@RequestBody AddOutDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
         String code = "Out-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
@@ -240,6 +238,7 @@
     }
     @Log(title = "审批-发起出差申请", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起出差申请")
+    @Transactional
     @PostMapping(value = "/addBusinessTrip")
     public R addBusinessTrip(@RequestBody AddBusinessTripDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -304,6 +303,7 @@
     }
     @Log(title = "审批-发起销假申请", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起销假申请")
+    @Transactional
     @PostMapping(value = "/addLeaveDestroy")
     public R addLeaveDestroy(@RequestBody AddLeaveDestroyDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -344,8 +344,8 @@
         // 根据请假时间 查询请假申请记录
         OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
                 .in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
-                .ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
-                .le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
+                .le(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
+                .ge(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
                 .eq(OaApprovalApplicationAttendance::getIsLeave, 1)
                 .orderByDesc(OaApprovalApplicationAttendance::getId)
                 .last("limit 1").one();
@@ -365,9 +365,24 @@
                 Integer.valueOf(sysUser.getDeptId()));
         return R.ok();
     }
-
+    @ApiOperation(value = "查询当前用户审批通过且未销假的请假单")
+    @GetMapping(value = "/listLeaveApplications")
+    public R<List<OaApprovalApplicationAttendance>> listLeaveApplications() {
+        List<Integer> applicationsIds = approvalApplicationsService.lambdaQuery()
+                .eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
+                .eq(OaApprovalApplications::getApplicantUserId, tokenService.getLoginUser().getUserId())
+                .eq(OaApprovalApplications::getApprovalStatus, 2)
+                .list().stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
+        if (applicationsIds.isEmpty()){
+            return R.ok(new ArrayList<>());
+        }
+        List<OaApprovalApplicationAttendance> list = approvalApplicationAttendanceService.lambdaQuery()
+                .in(OaApprovalApplicationAttendance::getApprovalApplicationId, applicationsIds).list();
+        return R.ok(list);
+    }
     @Log(title = "审批-发起报销申请", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起报销申请")
+    @Transactional
     @PostMapping(value = "/addReimbursement")
     public R addReimbursement(@RequestBody AddReimbursementDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -411,6 +426,7 @@
     }
     @Log(title = "审批-发起款项申请", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起款项申请")
+    @Transactional
     @PostMapping(value = "/addMoney")
     public R addMoney(@RequestBody AddMoneyDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -446,6 +462,7 @@
     @Log(title = "审批-发起合同文件申请", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起合同文件申请")
     @PostMapping(value = "/addContract")
+    @Transactional
     public R addContract(@RequestBody AddContractDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
         String code = "Contract-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
@@ -482,6 +499,7 @@
     }
     @Log(title = "审批-发起进度款支付申请", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起进度款支付申请")
+    @Transactional
     @PostMapping(value = "/addPayment")
     public R addPayment(@RequestBody AddPaymentDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -520,6 +538,7 @@
     }
     @Log(title = "审批-发起内部联系单申请", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起内部联系单申请")
+    @Transactional
     @PostMapping(value = "/addContact")
     public R addContact(@RequestBody AddContactDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -555,6 +574,7 @@
     }
     @Log(title = "审批-发起广告制作申请", businessType = BusinessType.INSERT)
     @ApiOperation(value = "发起广告制作申请")
+    @Transactional
     @PostMapping(value = "/addAdvertisement")
     public R addAdvertisement(@RequestBody AddAdvertisementDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
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 d090997..cd68061 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
@@ -84,6 +84,8 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -108,7 +110,8 @@
  */
 @RestController
 @RequestMapping("/oa-approval-flow-audit")
-@Api(tags = "我审批的/我发起的/通用审批接口")
+@Api(tags = "我审批的-我发起的-通用审批接口")
+@Slf4j
 public class OaApprovalFlowAuditController {
     @Resource
     private OaApprovalTodoService approvalTodoService;
@@ -243,7 +246,7 @@
             }
             SysUser sysUser = userMap.get(approvalApplication.getApplicantUserId().longValue());
             if (sysUser!=null){
-                approvalTodoVO.setApplyUserName(sysUser.getUserName());
+                approvalTodoVO.setApplyUserName(sysUser.getNickName());
                 TDept tDept = deptMap.get(Integer.parseInt(sysUser.getDeptId()));
                 if (tDept!=null){
                     approvalTodoVO.setApplyDeptName(tDept.getDeptName());
@@ -421,7 +424,7 @@
             }
             SysUser sysUser = userMap.get(approvalApplication.getApplicantUserId().longValue());
             if (sysUser!=null){
-                approvalTodoVO.setApplyUserName(sysUser.getUserName());
+                approvalTodoVO.setApplyUserName(sysUser.getNickName());
                 TDept tDept = deptMap.get(Integer.parseInt(sysUser.getDeptId()));
                 if (tDept!=null){
                     approvalTodoVO.setApplyDeptName(tDept.getDeptName());
@@ -532,6 +535,7 @@
     @Log(title = "审批-通用审批接口", businessType = BusinessType.INSERT)
     @ApiOperation(value = "通用审批接口")
     @PostMapping(value = "/audit")
+    @Transactional
     public R addLeave(@RequestBody AuditDTO dto) {
 
         OaApprovalApplications approvalApplications = approvalApplicationsService.getById(dto.getApprovalApplicationId());
@@ -570,6 +574,7 @@
         approvalFlowAudit.setReason(dto.getReason());
         approvalFlowAuditService.save(approvalFlowAudit);
         List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery().eq(OaApprovalFlowNode::getApprovalId, approval.getId())
+                .eq(OaApprovalFlowNode::getStatus,1)
                 .orderByAsc(OaApprovalFlowNode::getSortOrder).list();
         if (dto.getApprovalStatus() == 1) {
             // 判断当前是否处于最后一个节点
@@ -607,14 +612,18 @@
                     assetMainService.saveAssetByApprovalApplicationId(approvalApplications.getId());
                 }
             } else {
+                log.info("不为最后一个审批节点");
                 // 生成下一个节点的待办事项
                 for (int i = 0; i < approvalFlowNodes.size(); i++) {
-                    if (approvalApplications.getCurrentFlowNodeId()
-                            .equals(approvalFlowNodes.get(i).getId())) {
+                    if (approvalApplications.getCurrentFlowNodeId().equals(approvalFlowNodes.get(i).getId())) {
+                        log.info("匹配到审批流程,进入下一节点,当前节点id:{}", approvalFlowNodes.get(i));
+                        // 申请单审批流程修改为下一节点
                         approvalApplications.setCurrentFlowNodeId(approvalFlowNodes.get(i + 1).getId());
-                        OaApprovalFlowNode oaApprovalFlowNode1 = approvalFlowNodeService.getById(approvalFlowNodes.get(i + 1).getId());
+                        approvalApplicationsService.updateById(approvalApplications);
+                        OaApprovalFlowNode oaApprovalFlowNode1 = approvalFlowNodes.get(i + 1);
                         approvalTodoService.createApprovalTodos(approvalApplications.getId(),
                                 approvalApplications.getApplicationCode(), oaApprovalFlowNode1, approvalApplications.getDeptId());
+                        break;
                     }
                 }
             }
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 19da0e4..a569beb 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
@@ -73,6 +73,7 @@
     private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService;
     @Resource
     private OaApprovalFlowNodeService approvalFlowNodeService;
+
     @Resource
     private OaApprovalApplicationAssetService approvalApplicationAssetService;
     @Resource
@@ -93,7 +94,9 @@
     private OaApprovalFlowService  approvalFlowService;
 
 
+    public static void main(String[] args) {
 
+    }
     @ApiOperation("待办事项列表")
     @PostMapping("/pageList")
     public R<PageInfo<ApprovalTodoVO>> pageList(@RequestBody ApprovalTodoListQuery query) {
@@ -168,7 +171,7 @@
             }
             SysUser sysUser = userMap.get(approvalApplication.getApplicantUserId().longValue());
             if (sysUser!=null){
-                approvalTodoVO.setApplyUserName(sysUser.getUserName());
+                approvalTodoVO.setApplyUserName(sysUser.getNickName());
                 TDept tDept = deptMap.get(Integer.parseInt(sysUser.getDeptId()));
                 if (tDept!=null){
                     approvalTodoVO.setApplyDeptName(tDept.getDeptName());
@@ -182,17 +185,25 @@
                 case 5:
                     OaApprovalApplicationPurchase oaApprovalApplicationPurchase = approvalApplicationPurchaseMap.get(approvalApplication.getId());
                     if (oaApprovalApplicationPurchase!=null){
+                        approvalTodoVO.setTitle(oaApprovalApplicationPurchase.getTitle());
+
                         approvalTodoVO.setAmount(oaApprovalApplicationPurchase.getTotalAmount());
                     }
                     break;
                 case 6:
                     OaApprovalApplicationStorage oaApprovalApplicationStorage = applicationStorageMap.get(approvalApplication.getId());
                     if (oaApprovalApplicationStorage!=null){
+                        approvalTodoVO.setTitle(oaApprovalApplicationStorage.getTitle());
+
                         approvalTodoVO.setStorageType(oaApprovalApplicationStorage.getStorageType());
                     }
                     break;
                 case 7:
                     StringBuilder temp = new StringBuilder();
+                    OaApprovalApplicationAsset oaApprovalApplicationAsset = approvalApplicationAssetMap.get(approvalApplication.getId());
+                    if (oaApprovalApplicationAsset!=null){
+                        approvalTodoVO.setTitle(oaApprovalApplicationAsset.getTitle());
+                    }
                     List<OaApprovalApplicationAssetItem> oaApprovalApplicationAssetItems = approvalApplicationAssetItemMap.get(approvalApplication.getId());
                     if (oaApprovalApplicationAssetItems!=null){
                         for (OaApprovalApplicationAssetItem oaApprovalApplicationAssetItem : oaApprovalApplicationAssetItems) {
@@ -212,24 +223,32 @@
                 case 8:
                     OaApprovalApplicationAsset oaApprovalApplicationAssetOut = approvalApplicationAssetMap.get(approvalApplication.getId());
                     if (oaApprovalApplicationAssetOut!=null){
+                        approvalTodoVO.setTitle(oaApprovalApplicationAssetOut.getTitle());
+
                         approvalTodoVO.setOperateTime(oaApprovalApplicationAssetOut.getOperateTime());
                     }
                     break;
                 case 9:
                     OaApprovalApplicationAsset oaApprovalApplicationAssetBack = approvalApplicationAssetMap.get(approvalApplication.getId());
                     if (oaApprovalApplicationAssetBack!=null){
+                        approvalTodoVO.setTitle(oaApprovalApplicationAssetBack.getTitle());
+
                         approvalTodoVO.setOperateTime(oaApprovalApplicationAssetBack.getExpectReturnDate());
                     }
                     break;
                 case 10:
                     OaApprovalApplicationDispose oaApprovalApplicationDispose = approvalApplicationDisposeMap.get(approvalApplication.getId());
                     if (oaApprovalApplicationDispose!=null){
+                        approvalTodoVO.setTitle(oaApprovalApplicationDispose.getTitle());
+
                         approvalTodoVO.setDisposeType(oaApprovalApplicationDispose.getDisposeType());
                     }
                     break;
                 case 11:
                     OaApprovalApplicationChange oaApprovalApplicationChange = approvalApplicationChangeMap.get(approvalApplication.getId());
                     if (oaApprovalApplicationChange!=null){
+                        approvalTodoVO.setTitle(oaApprovalApplicationChange.getTitle());
+
                         Integer ownershipDeptId = oaApprovalApplicationChange.getOwnershipDeptId();
                         TDept tDept = deptMap.get(ownershipDeptId);
                         if (tDept!=null){
@@ -240,12 +259,14 @@
                 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());
 
@@ -254,6 +275,7 @@
                 case 15:
                     OaApprovalApplicationPayment oaApprovalApplicationPayment = approvalApplicationPaymentMap.get(approvalApplication.getId());
                     if (oaApprovalApplicationPayment!=null){
+
                         approvalTodoVO.setAmount(oaApprovalApplicationPayment.getApplyAmount());
                         approvalTodoVO.setDescription(approvalApplication.getApplicationReason());
 
@@ -262,6 +284,7 @@
                 case 17:
                     OaApprovalApplicationAdvertisement oaApprovalApplicationAdvertisement = approvalApplicationAdvertisementMap.get(approvalApplication.getId());
                     if (oaApprovalApplicationAdvertisement!=null){
+                        approvalTodoVO.setTitle(oaApprovalApplicationAdvertisement.getTitle());
                         approvalTodoVO.setContent(oaApprovalApplicationAdvertisement.getContent());
                         approvalTodoVO.setAmount(oaApprovalApplicationAdvertisement.getTotalAmount());
                     }
@@ -287,13 +310,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         ContractDetailVO res = new ContractDetailVO();
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -319,13 +344,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         PaymentDetailVO res = new PaymentDetailVO();
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -354,14 +381,15 @@
                 .list();
         LeaveDetailVO res = new LeaveDetailVO();
 
-
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -385,19 +413,24 @@
         OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
                 .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalApplications.getId())
                 .last("limit 1").one();
-        OaApprovalApplicationAttendance leaveApplication = approvalApplicationAttendanceService.getById(approvalApplicationAttendance.getLeaveApprovalApplicationId());
+        OaApprovalApplications leaveApplication = approvalApplicationsService.getById(approvalApplicationAttendance.getLeaveApprovalApplicationId());
+
+        OaApprovalApplicationAttendance leaveApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
+                .eq(OaApprovalApplicationAttendance::getApprovalApplicationId, leaveApplication.getId())
+                .last("limit 1").one();
         List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId())
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         LeaveDestroyDetailVO res = new LeaveDestroyDetailVO();
-
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -410,9 +443,9 @@
         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.setStartTimeLeave(leaveApplicationAttendance.getStartTime());
+        res.setEndTimeLeave(leaveApplicationAttendance.getEndTime());
+        res.setDurationLeave(leaveApplicationAttendance.getDuration());
         res.setDuration(approvalApplicationAttendance.getDuration());
         return R.ok(res);
     }
@@ -428,13 +461,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         OutDetailVO res = new OutDetailVO();
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -448,6 +483,7 @@
         res.setStartTime(approvalApplicationAttendance.getStartTime());
         res.setEndTime(approvalApplicationAttendance.getEndTime());
         res.setDuration(approvalApplicationAttendance.getDuration());
+        res.setAddress(approvalApplicationAttendance.getAddress());
         return R.ok(res);
     }
     @ApiOperation(value = "出差审批详情")
@@ -463,14 +499,15 @@
                 .list();
         BusinessTripDetailVO res = new BusinessTripDetailVO();
 
-
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -508,13 +545,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         PurchaseDetailVO res = new PurchaseDetailVO();
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -554,7 +593,8 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         GrabDetailVO res = new GrabDetailVO();
-
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
 
         List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                 .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.GRAB.getCode())
@@ -562,7 +602,7 @@
                 .eq(OaApprovalFlowNode::getStatus, 1).list();
         SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
         if (sysUser!=null){
-            res.setUserName(sysUser.getUserName());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -601,6 +641,8 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         StorageDetailVO res = new StorageDetailVO();
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                 .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.IN_STOCK.getCode())
                 .orderByAsc(OaApprovalFlowNode::getSortOrder)
@@ -608,6 +650,7 @@
         SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
 
         List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(sysUser, approvalFlowAudits,approvalFlowNodes);
+        res.setAssetTypeName(assetTypeService.getById(approvalApplicationStorage.getAssetTypeId()).getTypeName());
         res.setApprovalFlowNodeListVOS(flowNodeList);
         res.setApprovalApplicationId(approvalApplications.getId());
         res.setAttachmentUrl(approvalApplications.getAttachmentUrl());
@@ -637,14 +680,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         BorrowDetailVO res = new BorrowDetailVO();
-
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                 .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BORROW.getCode())
                 .orderByAsc(OaApprovalFlowNode::getSortOrder)
                 .eq(OaApprovalFlowNode::getStatus, 1).list();
         SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
         if (sysUser!=null){
-            res.setUserName(sysUser.getUserName());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -680,13 +724,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         BackDetailVO res = new BackDetailVO();
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -724,14 +770,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         DisposeDetailVO res = new DisposeDetailVO();
-
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -774,13 +821,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         ChangeDetailVO res = new ChangeDetailVO();
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -821,7 +870,8 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         ReimbursementDetailVO res = new ReimbursementDetailVO();
-
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
 
         List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                 .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.REIMBURSEMENT.getCode())
@@ -829,7 +879,7 @@
                 .eq(OaApprovalFlowNode::getStatus, 1).list();
         SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
         if (sysUser!=null){
-            res.setUserName(sysUser.getUserName());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -857,13 +907,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         MoneyDetailVO res = new MoneyDetailVO();
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -896,15 +948,15 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         ContactDetailVO res = new ContactDetailVO();
-
-
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
         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());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -932,7 +984,8 @@
                 .orderByAsc(OaApprovalFlowAudit::getSortOrder)
                 .list();
         AdvertisementDetailVO res = new AdvertisementDetailVO();
-
+        OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(approvalApplications.getCurrentFlowNodeId());
+        res.setSignFlag(oaApprovalFlowNode.getSignFlag());
 
         List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery()
                 .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ADVERTISEMENT.getCode())
@@ -940,7 +993,7 @@
                 .eq(OaApprovalFlowNode::getStatus, 1).list();
         SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue());
         if (sysUser!=null){
-            res.setUserName(sysUser.getUserName());
+            res.setUserName(sysUser.getNickName());
             TDept dept = deptService.getById(sysUser.getDeptId());
             if (dept!=null){
                 res.setDeptName(dept.getDeptName());
@@ -967,7 +1020,7 @@
         ApprovalFlowNodeListVO approvalFlowNodeListVO = new ApprovalFlowNodeListVO();
         approvalFlowNodeListVO.setFlowName("发起");
         if (sysUser!=null){
-            approvalFlowNodeListVO.setUserName(sysUser.getUserName());
+            approvalFlowNodeListVO.setUserName(sysUser.getNickName());
         }
         approvalFlowNodeListVOS.add(approvalFlowNodeListVO);
         for (OaApprovalFlowNode approvalFlowNode : approvalFlowNodes) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java
index 153be7e..08512cc 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,9 +13,13 @@
 public class AddBusinessTripDTO implements Serializable {
 
     @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
     private LocalDateTime startTime;
 
     @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
     private LocalDateTime endTime;
 
     @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java
index d600dde..49bd6ce 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.dto;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -13,9 +14,11 @@
 public class AddLeaveDTO implements Serializable {
 
     @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime startTime;
 
     @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime endTime;
 
     @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java
index 0308db9..acc9bef 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,9 +13,13 @@
 public class AddLeaveDestroyDTO implements Serializable {
 
     @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
     private LocalDateTime startTime;
 
     @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
     private LocalDateTime endTime;
 
     @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java
index 60d4f8c..a09f9aa 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,9 +13,13 @@
 public class AddOutDTO implements Serializable {
 
     @ApiModelProperty(value = "开始请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
     private LocalDateTime startTime;
 
     @ApiModelProperty(value = "结束请假/外出/出差/销假时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+
     private LocalDateTime endTime;
 
     @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetTypeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetTypeMapper.java
index ccec86a..e3a5359 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetTypeMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetTypeMapper.java
@@ -1,7 +1,13 @@
 package com.ruoyi.system.mapper;
 
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.model.AssetType;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.query.AssetStatisticsListQuery;
+import com.ruoyi.system.vo.AssetStatisticsVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,7 @@
  */
 public interface AssetTypeMapper extends BaseMapper<AssetType> {
 
+    List<AssetStatisticsVO> pageList(@Param("query")AssetStatisticsListQuery query, @Param("pageInfo")PageInfo<AssetStatisticsVO> pageInfo);
+
+    List<AssetStatisticsVO> pageListNoLimit(@Param("query")AssetStatisticsListQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java
index 8658098..2d7def2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AssetMain.java
@@ -76,7 +76,7 @@
 
     @ApiModelProperty(value = "数量")
     @TableField("quantity")
-    private BigDecimal quantity;
+    private Integer quantity;
 
     @ApiModelProperty(value = "单价")
     @TableField("unit_price")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationPurchase.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationPurchase.java
index 53aab7e..07fd898 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationPurchase.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationPurchase.java
@@ -41,10 +41,6 @@
     @TableField("title")
     private String title;
 
-    @ApiModelProperty(value = "申请日期")
-    @TableField("application_date")
-    private Date applicationDate;
-
     @ApiModelProperty(value = "资产类型")
     @TableField("asset_type_id")
     private Integer assetTypeId;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java
index 1c74eba..712c7e4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java
@@ -7,7 +7,7 @@
 import lombok.Data;
 
 @Data
-@ApiModel(value = "代办事项/我审批的/我发起的分页列表query")
+@ApiModel(value = "代办事项-我审批的-我发起的分页列表query")
 public class ApprovalTodoListQuery extends BasePage {
 
     @ApiModelProperty("用户id 前端忽略")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListDetailQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListDetailQuery.java
new file mode 100644
index 0000000..89dad90
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListDetailQuery.java
@@ -0,0 +1,22 @@
+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;
+
+import java.util.List;
+
+@Data
+@ApiModel(value = "资产明细分页列表query")
+public class AssetStatisticsListDetailQuery extends BasePage {
+
+    @ApiModelProperty(value = "资产名称或编号")
+    private String nameOrCode;
+    @ApiModelProperty(value = "资产类别")
+    private String category;
+    @ApiModelProperty(value = "资产状态")
+    private String assetStatus;
+    @ApiModelProperty(value = "资产ids 前端忽略")
+    private List<Integer> assetMainIds;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListQuery.java
new file mode 100644
index 0000000..7dce783
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssetStatisticsListQuery.java
@@ -0,0 +1,20 @@
+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;
+
+import java.util.List;
+
+@Data
+@ApiModel(value = "资产汇总分页列表query")
+public class AssetStatisticsListQuery extends BasePage {
+
+    @ApiModelProperty(value = "资产名称或编号")
+    private String nameOrCode;
+    @ApiModelProperty(value = "资产分类id")
+    private Integer assetTypeId;
+    @ApiModelProperty(value = "资产分类ids 前端忽略")
+    private List<Integer> assetTypeIds;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetTypeService.java
index a015c00..7a73cd7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetTypeService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/AssetTypeService.java
@@ -1,8 +1,11 @@
 package com.ruoyi.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.system.dto.asset.AssetTypeDTO;
 import com.ruoyi.system.model.AssetType;
+import com.ruoyi.system.query.AssetStatisticsListQuery;
+import com.ruoyi.system.vo.AssetStatisticsVO;
 import com.ruoyi.system.vo.asset.AssetTypeTreeVO;
 
 import java.util.List;
@@ -54,4 +57,5 @@
      */
     String getAssetCodePrefix(Integer assetTypeId);
 
+    PageInfo<AssetStatisticsVO> pageList(AssetStatisticsListQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java
index ee541e3..db13495 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetMainServiceImpl.java
@@ -132,7 +132,7 @@
                 assetMain.setAssetCode(assetCode);
                 
                 // 单个资产的数量设为1
-                assetMain.setQuantity(BigDecimal.ONE);
+                assetMain.setQuantity(1);
                 // 单个资产的总价值等于单价
                 assetMain.setTotalValue(storageAsset.getUnitPrice());
                 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java
index 786edc5..a28fcd9 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetTypeServiceImpl.java
@@ -5,20 +5,29 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.common.utils.SecurityUtils;
 import com.ruoyi.system.dto.asset.AssetTypeDTO;
 import com.ruoyi.system.mapper.AssetTypeMapper;
 import com.ruoyi.system.model.AssetMain;
 import com.ruoyi.system.model.AssetType;
+import com.ruoyi.system.query.AssetStatisticsListQuery;
 import com.ruoyi.system.service.AssetMainService;
 import com.ruoyi.system.service.AssetTypeService;
+import com.ruoyi.system.vo.AssetStatisticsVO;
 import com.ruoyi.system.vo.asset.AssetTypeTreeVO;
+import com.ruoyi.system.vo.system.NotificationVO;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -287,4 +296,65 @@
         return parentTypeCode + subTypeCode;
     }
 
+    @Override
+    public PageInfo<AssetStatisticsVO> pageList(AssetStatisticsListQuery query) {
+        if (StringUtils.hasLength(query.getNameOrCode())){
+            // 查询出资产名称或者资产编号符合条件的code
+            List<Integer> assetTypeIds = assetMainService.lambdaQuery().like(AssetMain::getAssetName, query.getNameOrCode())
+                    .or()
+                    .like(AssetMain::getAssetCode, query.getNameOrCode())
+                    .list()
+                    .stream()
+                    .map(AssetMain::getAssetTypeId)
+                    .collect(Collectors.toList());
+            query.setAssetTypeIds(assetTypeIds);
+            if (assetTypeIds.isEmpty()){
+                return new PageInfo<>();
+            }
+        }
+        PageInfo<AssetStatisticsVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        List<AssetStatisticsVO> list = this.baseMapper.pageList(query,pageInfo);
+        List<AssetStatisticsVO> listNoLimit = this.baseMapper.pageListNoLimit(query);
+        List<Integer> assetTypeIds = listNoLimit.stream().map(AssetStatisticsVO::getAssetTypeIdSecond).collect(Collectors.toList());
+        if (assetTypeIds.isEmpty()){
+            return new PageInfo<>();
+        }
+        Map<Integer, List<AssetMain>> assetMainMap = assetMainService.lambdaQuery().in(AssetMain::getAssetTypeId, assetTypeIds).list()
+                .stream()
+                .collect(Collectors.groupingBy(AssetMain::getAssetTypeId));
+        for (AssetStatisticsVO asset : list) {
+            Integer totalCount= 0;
+            Integer idleCount= 0;
+            Integer useCount= 0;
+            Integer disposeCount= 0;
+            Integer otherCount= 0;
+            BigDecimal totalValue = new BigDecimal("0");
+            List<AssetMain> assetMains = assetMainMap.get(asset.getAssetTypeIdSecond());
+            if (!assetMains.isEmpty()){
+                for (AssetMain assetMain : assetMains) {
+                    if (assetMain.getAssetStatus().contains("闲置")){
+                        idleCount += assetMain.getQuantity();
+                    }else if (assetMain.getAssetStatus().contains("使用中")){
+                        useCount += assetMain.getQuantity();
+                    }else if (assetMain.getAssetStatus().contains("损坏") || assetMain.getAssetStatus().contains("报废")){
+                        disposeCount += assetMain.getQuantity();
+                    }else{
+                        otherCount += assetMain.getQuantity();
+                    }
+                    totalCount+= assetMain.getQuantity();
+                    totalValue = totalValue.add(new BigDecimal(assetMain.getQuantity())
+                            .multiply(assetMain.getUnitPrice()).setScale(2, RoundingMode.HALF_DOWN));
+                }
+            }
+            asset.setIdleCount(idleCount);
+            asset.setUseCount(useCount);
+            asset.setDisposeCount(disposeCount);
+            asset.setOtherCount(otherCount);
+            asset.setTotalCount(totalCount);
+            asset.setTotalValue(totalValue);
+        }
+        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 7dfc6c6..8482ca5 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
@@ -42,6 +42,8 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -776,6 +778,10 @@
     public PageInfo<StorageListVO> pageList(ApprovalDetailQuery query) {
         PageInfo<StorageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         List<StorageListVO> list = this.baseMapper.pageList(query,pageInfo);
+        for (StorageListVO storageListVO : list) {
+            BigDecimal value = new BigDecimal(storageListVO.getQuantity()).multiply(storageListVO.getUnitPrice()).setScale(2, RoundingMode.HALF_UP);
+            storageListVO.setTotalValue(value);
+        }
         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 c803e68..82ba9ee 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
@@ -18,6 +18,7 @@
 import com.ruoyi.system.vo.ApprovalTodoVO;
 import com.ruoyi.system.vo.system.NotificationVO;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.core.token.TokenService;
 import org.springframework.stereotype.Service;
@@ -38,6 +39,7 @@
  */
 @Service
 @RequiredArgsConstructor
+@Slf4j
 public class OaApprovalTodoServiceImpl extends ServiceImpl<OaApprovalTodoMapper, OaApprovalTodo> implements OaApprovalTodoService {
 
     private final ISysUserService sysUserService;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java
index e581beb..8887cd7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java
@@ -60,6 +60,6 @@
 
         }
         pageInfo.setRecords(list);
-        return null;
+        return pageInfo;
     }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java
index 7c619d8..088a295 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java
@@ -15,7 +15,8 @@
 @Data
 @ApiModel(value = "广告制作详情返回VO")
 public class AdvertisementDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "申请人")
     private String userName;
     @ApiModelProperty(value = "所属部门")
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 d25e522..913bc79 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
@@ -37,7 +37,8 @@
 
     private LocalDateTime createTime;
 
-
+    @ApiModelProperty(value = "事项标题")
+    private String title;
     @ApiModelProperty(value = "审批申请ID")
     private Integer applicationId;
     @ApiModelProperty(value = "报销金额/申请金额/合计金额/总金额(报销申请/款项申请/款项支付审批/广告制作)")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/AssetStatisticsVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AssetStatisticsVO.java
new file mode 100644
index 0000000..5473039
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AssetStatisticsVO.java
@@ -0,0 +1,35 @@
+package com.ruoyi.system.vo;
+
+import com.ruoyi.system.model.OaNotification;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "资产汇总分页返回VO")
+public class AssetStatisticsVO implements Serializable {
+
+    @ApiModelProperty(value = "资产大类名称")
+    private String assetTypeNameFirst;
+    @ApiModelProperty(value = "资产大类id")
+    private Integer assetTypeIdFirst;
+    @ApiModelProperty(value = "资产子类名称")
+    private String assetTypeNameSecond;
+    @ApiModelProperty(value = "资产子类id")
+    private Integer assetTypeIdSecond;
+    @ApiModelProperty(value = "合计数量")
+    private Integer totalCount;
+    @ApiModelProperty(value = "闲置数量")
+    private Integer idleCount;
+    @ApiModelProperty(value = "使用中数量")
+    private Integer useCount;
+    @ApiModelProperty(value = "损坏/报废数量")
+    private Integer disposeCount;
+    @ApiModelProperty(value = "其他数量")
+    private Integer otherCount;
+    @ApiModelProperty(value = "合计总价")
+    private BigDecimal totalValue;
+}
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 8c71855..2393a0d 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
@@ -14,7 +14,8 @@
 @Data
 @ApiModel(value = "借用归还审批详情返回VO")
 public class BackDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "借用人")
     private String userName;
     @ApiModelProperty(value = "借用部门")
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 b8648ae..b2c9455 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
@@ -14,7 +14,8 @@
 @Data
 @ApiModel(value = "物品借用审批详情返回VO")
 public class BorrowDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "借用人")
     private String userName;
     @ApiModelProperty(value = "借用部门")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java
index 944d4b3..9a1ecdb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java
@@ -12,7 +12,8 @@
 @Data
 @ApiModel(value = "出差审批详情返回VO")
 public class BusinessTripDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "申请人")
     private String userName;
     @ApiModelProperty(value = "所属部门")
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 483fcc4..d55754c 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
@@ -14,7 +14,8 @@
 @Data
 @ApiModel(value = "资产变更审批详情返回VO")
 public class ChangeDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "领用人")
     private String userName;
     @ApiModelProperty(value = "领用部门")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java
index 9007069..d6929cc 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java
@@ -12,7 +12,8 @@
 @Data
 @ApiModel(value = "内部联系单详情返回VO")
 public class ContactDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "申请人")
     private String userName;
     @ApiModelProperty(value = "所属部门")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java
index a433845..4bb2fa4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java
@@ -29,6 +29,8 @@
     private Integer approvalApplicationId;
     @ApiModelProperty(value = "合同文件地址")
     private String contractUrl;
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @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 f6d1476..8a34ff8 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
@@ -16,7 +16,8 @@
 @Data
 @ApiModel(value = "资产处置审批详情返回VO")
 public class DisposeDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "领用人")
     private String userName;
     @ApiModelProperty(value = "领用部门")
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 bf48813..53b5106 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
@@ -15,7 +15,8 @@
 @Data
 @ApiModel(value = "物品领用审批详情返回VO")
 public class GrabDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "领用人")
     private String userName;
     @ApiModelProperty(value = "领用部门")
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 6cb5c14..d6551ac 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
@@ -40,6 +40,8 @@
     private LocalDateTime endTimeLeave;
     @ApiModelProperty(value = "关联请假请假时长(天)")
     private Double durationLeave;
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "审批流程")
     private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java
index 71cc9bb..1ebd527 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java
@@ -35,6 +35,8 @@
     private LocalDateTime endTime;
     @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
     private Double duration;
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "审批流程")
     private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java
index 708594e..a2e402d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java
@@ -13,7 +13,8 @@
 @Data
 @ApiModel(value = "款项审批详情返回VO")
 public class MoneyDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "申请人")
     private String userName;
     @ApiModelProperty(value = "所属部门")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java
index da30481..ddbe663 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java
@@ -12,7 +12,8 @@
 @Data
 @ApiModel(value = "外出审批详情返回VO")
 public class OutDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "申请人")
     private String userName;
     @ApiModelProperty(value = "所属部门")
@@ -33,6 +34,8 @@
     private LocalDateTime endTime;
     @ApiModelProperty(value = "请假/外出/出差/销假时长(天)")
     private Double duration;
+    @ApiModelProperty(value = "外出地点")
+    private String address;
     @ApiModelProperty(value = "审批流程")
     private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java
index 23a9d1e..33c490f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java
@@ -26,6 +26,8 @@
     private String projectName;
     @ApiModelProperty(value = "申请金额")
     private BigDecimal applyAmount;
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @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 0bcef3c..5b720ce 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
@@ -14,7 +14,8 @@
 @Data
 @ApiModel(value = "采购审批详情返回VO")
 public class PurchaseDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "申请人")
     private String userName;
     @ApiModelProperty(value = "所属部门")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java
index 805f548..528c163 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java
@@ -14,7 +14,8 @@
 @Data
 @ApiModel(value = "报销审批详情返回VO")
 public class ReimbursementDetailVO implements Serializable {
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
     @ApiModelProperty(value = "申请人")
     private String userName;
     @ApiModelProperty(value = "所属部门")
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 4d853b7..cf41d80 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
@@ -14,7 +14,8 @@
 @ApiModel(value = "资产入库审批详情返回VO")
 public class StorageDetailVO implements Serializable {
 
-
+    @ApiModelProperty(value = "是否需要签名 0-否,1-是")
+    private Boolean signFlag;
 
     @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接")
     private String attachmentUrl;
@@ -22,6 +23,8 @@
     private Integer approvalApplicationId;
     @ApiModelProperty(value = "标题")
     private String title;
+    @ApiModelProperty(value = "资产类型名称")
+    private String assetTypeName;
     @ApiModelProperty(value = "入库类型 0-正常入库")
     private Integer storageType;
     @ApiModelProperty(value = "入库日期")
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 109de45..4f9ec6b 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
@@ -24,7 +24,7 @@
     private String measurementUnit;
 
     @ApiModelProperty(value = "数量")
-    private BigDecimal quantity;
+    private Integer quantity;
 
     @ApiModelProperty(value = "单价")
     private BigDecimal unitPrice;
diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetTypeMapper.xml
index 869bc5e..887b27b 100644
--- a/ruoyi-system/src/main/resources/mapper/system/AssetTypeMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/AssetTypeMapper.xml
@@ -20,5 +20,40 @@
     <sql id="Base_Column_List">
         id, type_name, type_code, parent_id, level, create_time, create_by, update_time, update_by, disabled
     </sql>
+    <select id="pageList" resultType="com.ruoyi.system.vo.AssetStatisticsVO">
+        select t1.id as assetTypeIdSecond,t1.type_name as assetTypeNameSecond,
+               t2.id as assetTypeIdFirst,t2.type_name as assetTypeNameFirst
+        FROM asset_type t1
+        left join asset_type t2 on t1.parent_id = t2.id
+        where 1=1
+        and
+        t1.parent_id != 0
+        <if test="query.assetTypeIds != null and query.assetTypeIds.size()>0">
+            AND t1.id IN
+            <foreach collection="query.assetTypeIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+               AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+               AND t2.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+
+    </select>
+    <select id="pageListNoLimit" resultType="com.ruoyi.system.vo.AssetStatisticsVO">
+        select t1.id as assetTypeIdSecond,t1.type_name as assetTypeNameSecond,
+        t2.id as assetTypeIdFirst,t2.type_name as assetTypeNameFirst
+        FROM asset_type t1
+        left join asset_type t2 on t1.parent_id = t2.id
+        where 1=1
+        and
+        t1.parent_id != 0
+        <if test="query.assetTypeIds != null and query.assetTypeIds.size()>0">
+            AND t1.id IN
+            <foreach collection="query.assetTypeIds" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+        AND t2.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+    </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 6bb5c05..ac3a097 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml
@@ -22,14 +22,24 @@
         id, application_id, application_code, flow_node_id, user_id, user_name, dept_id, sort_order, status, create_time, handle_time
     </sql>
     <select id="pageList" resultType="com.ruoyi.system.model.OaApprovalTodo">
-        select * from oa_approval_todo
-        where 1=1
+        SELECT *
+        FROM oa_approval_todo t1
+        WHERE t1.id = (
+        SELECT t2.id
+        FROM oa_approval_todo t2
+        WHERE t2.application_id = t1.application_id
+        AND t2.status = 0
         <if test="query.userId != null">
-            and user_id = #{query.userId}
+            AND t2.user_id = #{query.userId}
         </if>
-        and status = 0
-        group by application_id
-        order by create_time desc
+        ORDER BY t2.create_time DESC
+        LIMIT 1
+        )
+        <if test="query.userId != null">
+            AND t1.user_id = #{query.userId}
+        </if>
+        AND t1.status = 0
+        ORDER BY t1.create_time DESC
     </select>
     <select id="pageListAudit" resultType="com.ruoyi.system.model.OaApprovalTodo">
         select * from oa_approval_todo

--
Gitblit v1.7.1