From 67e7b5fc821a35f013e7a46a5957f4c6394d236d Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 24 十月 2025 18:14:51 +0800
Subject: [PATCH] bug修改

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java     |   26 ++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetInventoryTaskServiceImpl.java  |   86 +++++++++++---------
 ruoyi-system/src/main/java/com/ruoyi/system/query/AssertInventoryQuery.java                  |    3 
 ruoyi-system/src/main/resources/mapper/system/AssetInventoryTaskMapper.xml                   |   29 +++++++
 ruoyi-system/src/main/java/com/ruoyi/system/query/InventoryTaskQuery.java                    |    8 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java      |   10 +-
 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml           |    9 -
 ruoyi-system/src/main/java/com/ruoyi/system/constants/ApprovalApplicationCodePrefix.java     |    1 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetInventoryTaskMapper.java             |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java               |    9 +
 11 files changed, 132 insertions(+), 55 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java
index f352ecf..cb9aea8 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetRepairRequestController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.constants.ApprovalApplicationCodePrefix;
 import com.ruoyi.system.dto.AddAssetRepairRequestDTO;
 import com.ruoyi.system.model.AssetMain;
 import com.ruoyi.system.model.AssetRepairRequest;
@@ -37,6 +38,8 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -120,7 +123,7 @@
     @ApiOperation(value = "资产报修新增")
     @PostMapping(value = "/add")
     public R add(@RequestBody AddAssetRepairRequestDTO dto) {
-        dto.setRepairNo("1");
+        dto.setRepairNo(generateRepairNo());
         Long userId = tokenService.getLoginUser().getUserId();
         dto.setReporterId(userId.intValue());
         assetRepairRequestService.save(dto);
@@ -131,6 +134,27 @@
         return R.ok();
 
     }
+    /**
+     * 生成维修单号
+     * 格式:WX + 日期 + 4位序号
+     */
+    private String generateRepairNo() {
+        String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+
+        // 查询当天已生成的维修单号数量
+        Long count = assetRepairRequestService.lambdaQuery()
+                .likeRight(AssetRepairRequest::getRepairNo, ApprovalApplicationCodePrefix.ASSET_REPAIR_REQUEST)
+                .ge(AssetRepairRequest::getCreateTime, LocalDate.now().atStartOfDay())
+                .lt(AssetRepairRequest::getCreateTime, LocalDate.now().plusDays(1).atStartOfDay())
+                .count();
+
+        // 生成4位序号,从0001开始
+        int sequence = (count != null ? count.intValue() : 0) + 1;
+        String sequenceStr = String.format("%04d", sequence);
+
+        return ApprovalApplicationCodePrefix.ASSET_REPAIR_REQUEST + dateStr + sequenceStr;
+    }
+
     @Log(title = "资产报修-编辑", businessType = BusinessType.UPDATE)
     @ApiOperation(value = "资产报修编辑")
     @PostMapping(value = "/update")
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 d6ffde2..a8ca035 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
@@ -619,6 +619,7 @@
     @Log(title = "审批-撤回通用审批单", businessType = BusinessType.UPDATE)
     @ApiOperation(value = "撤回审批单(通用接口)")
     @PutMapping(value = "/withdraw/{id}")
+    @Transactional(rollbackFor = Exception.class)
     public R<?> withdraw(@PathVariable Integer id) {
         OaApprovalApplications current = approvalApplicationsService.getById(id);
         if (current == null) {
@@ -631,6 +632,8 @@
         update.setId(id);
         update.setApprovalStatus(ApprovalStatusEnum.CANCELED.getCode());
         approvalApplicationsService.updateById(update);
+        //删除待办事项
+        oaApprovalTodoService.deleteByApplicationId(id);
         return R.ok();
     }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/constants/ApprovalApplicationCodePrefix.java b/ruoyi-system/src/main/java/com/ruoyi/system/constants/ApprovalApplicationCodePrefix.java
index d26387d..6315f83 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/constants/ApprovalApplicationCodePrefix.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/constants/ApprovalApplicationCodePrefix.java
@@ -13,5 +13,6 @@
     String ASSET_RETURN = "GH";  // 归还申请
     String ASSET_DISPOSE = "CZ";  // 处置申请
     String ASSET_CHANGE = "BG";  // 变更申请
+    String ASSET_REPAIR_REQUEST = "BX";  // 报修申请
     String ASSET_REPAIR = "WX";  // 维修申请
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetInventoryTaskMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetInventoryTaskMapper.java
index 0ed0e0e..f404050 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetInventoryTaskMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AssetInventoryTaskMapper.java
@@ -4,7 +4,9 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.system.model.AssetInventoryTask;
+import com.ruoyi.system.query.AssertInventoryQuery;
 import com.ruoyi.system.query.InventoryTaskQuery;
+import com.ruoyi.system.vo.asset.AssetInventoryTaskVO;
 import com.ruoyi.system.vo.asset.AssetMainInventoryVO;
 import com.ruoyi.system.vo.asset.InventoryTaskStatisticsVO;
 import org.apache.ibatis.annotations.Param;
@@ -49,4 +51,5 @@
      */
     InventoryTaskStatisticsVO getInventoryTaskStatistics(@Param("taskId") Integer taskId);
 
+    IPage<AssetInventoryTaskVO> getPageList(Page<AssetInventoryTask> page, @Param("query") AssertInventoryQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssertInventoryQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssertInventoryQuery.java
index 143582c..9b783f1 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/AssertInventoryQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/AssertInventoryQuery.java
@@ -18,4 +18,7 @@
 
     @ApiModelProperty("盘点任务名称")
     private String taskName;
+
+    @ApiModelProperty("所属部门ID,前端不传")
+    private Integer deptId;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/InventoryTaskQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/InventoryTaskQuery.java
index 3e25899..774221d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/InventoryTaskQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/InventoryTaskQuery.java
@@ -28,4 +28,12 @@
     @ApiModelProperty("盘点结果 0-未盘点,1-正常,2-异常 ")
     private Integer resultStatus;
 
+    @ApiModelProperty("是否需要校验数据权限,前端不传")
+    private Boolean hasNoPermission;
+
+    @ApiModelProperty("当前登录用户ID,前端不传")
+    private Long userId;
+
+    @ApiModelProperty("当前登录用户部门,前端不传")
+    private String deptName;
 }
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 6d4a31e..eae9cb1 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
@@ -5,9 +5,6 @@
 import com.ruoyi.system.model.OaApprovalFlowNode;
 import com.ruoyi.system.model.OaApprovalTodo;
 import com.ruoyi.system.query.ApprovalTodoListQuery;
-import com.ruoyi.system.vo.ApprovalTodoVO;
-
-import java.util.List;
 
 /**
  * <p>
@@ -32,4 +29,10 @@
     PageInfo<OaApprovalTodo> pageList(ApprovalTodoListQuery query);
 
     PageInfo<OaApprovalTodo> pageListAudit(ApprovalTodoListQuery query);
+
+    /**
+     * 根据申请单ID删除待办
+     * @param id
+     */
+    void deleteByApplicationId(Integer id);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetInventoryTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetInventoryTaskServiceImpl.java
index cb0c6bb..fc6519c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetInventoryTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetInventoryTaskServiceImpl.java
@@ -34,7 +34,6 @@
 import com.ruoyi.system.vo.asset.InventoryTaskTabVO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -73,48 +72,35 @@
 
     @Override
     public IPage<AssetInventoryTaskVO> getInventoryTaskPage(AssertInventoryQuery query) {
-        // 1. 构建Lambda查询条件
-        LambdaQueryWrapper<AssetInventoryTask> wrapper = new LambdaQueryWrapper<>();
-        wrapper.like(StringUtils.isNotBlank(query.getTaskName()),
-                     AssetInventoryTask::getTaskName, query.getTaskName())
-               .eq(AssetInventoryTask::getDisabled, false)
-               .orderByDesc(AssetInventoryTask::getCreateTime);
+        // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据
+        Long userId = SecurityUtils.getUserId();
+        boolean isAdmin = SecurityUtils.isAdmin(userId);
 
+        if (!isAdmin) {
+            try {
+                // 获取当前用户的部门名称
+                String deptName = sysUserService.selectUserById(userId).getDeptName();
+
+                // 非超级管理员且非资产管理部,设置部门权限
+                if (!AssetDeptConstant.ASSET_INVENTORY_DEPT_NAMES.contains(deptName)) {
+                    query.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
+                }
+            } catch (Exception e) {
+                // 如果获取部门信息失败,默认设置部门权限
+                try {
+                    query.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
+                } catch (Exception ex) {
+                    // ignore parse, leave null if cannot parse
+                }
+            }
+        }
         // 2. 构建分页对象
         Page<AssetInventoryTask> page = new Page<>(query.getPageNum(), query.getPageSize());
 
         // 3. 执行分页查询
-        IPage<AssetInventoryTask> taskPage = this.page(page, wrapper);
+        IPage<AssetInventoryTaskVO> taskPage = this.baseMapper.getPageList(page, query);
 
-        // 4. 收集部门ID并去重
-        List<Integer> deptIds = taskPage.getRecords().stream()
-                .map(AssetInventoryTask::getDeptId)
-                .filter(Objects::nonNull)
-                .distinct()
-                .collect(Collectors.toList());
-
-        // 5. 批量查询部门信息
-        List<TDept> depts = deptIds.isEmpty() ?
-                Collections.emptyList() :
-                deptService.listByIds(deptIds);
-
-        // 6. 构建部门ID->名称的映射Map
-        Map<Integer, String> deptNameMap = depts.stream()
-                .collect(Collectors.toMap(TDept::getId, TDept::getDeptName));
-
-        // 7. 使用BeanUtil.copyToList转换VO并填充部门名称
-        List<AssetInventoryTaskVO> voList = BeanUtil.copyToList(taskPage.getRecords(), AssetInventoryTaskVO.class);
-        voList.forEach(vo -> {
-            if (vo.getDeptId() != null) {
-                vo.setDeptName(deptNameMap.get(vo.getDeptId()));
-            }
-        });
-
-        // 8. 构建返回的分页结果
-        IPage<AssetInventoryTaskVO> resultPage = new Page<>(taskPage.getCurrent(), taskPage.getSize(), taskPage.getTotal());
-        resultPage.setRecords(voList);
-
-        return resultPage;
+        return taskPage;
     }
 
     @Override
@@ -194,7 +180,7 @@
         // 数据权限:超级管理员/资产管理部、董事长、总经理查看所有数据,其他部门查看当前及下级部门的数据
         Long userId = SecurityUtils.getUserId();
         boolean isAdmin = SecurityUtils.isAdmin(userId);
-        boolean hasNoPermission = isAdmin;
+        boolean hasNoPermission = false;
         if (!isAdmin) {
             try {
                 // 获取当前用户的部门名称
@@ -341,6 +327,25 @@
 
     @Override
     public IPage<AssetMainInventoryVO> getListByTaskId(InventoryTaskQuery query) {
+        // 数据权限:超级管理员/资产管理部、董事长、总经理查看所有数据,其他部门查看当前及下级部门的数据
+        Long userId = SecurityUtils.getUserId();
+        boolean isAdmin = SecurityUtils.isAdmin(userId);
+        query.setHasNoPermission(Boolean.FALSE);
+        query.setUserId(userId);
+        if (!isAdmin) {
+            try {
+                // 获取当前用户的部门名称
+                String deptName = sysUserService.selectUserById(userId).getDeptName();
+                query.setDeptName(deptName);
+                // 非超级管理员且非资产管理部,设置部门权限
+                if (!AssetDeptConstant.ASSET_INVENTORY_DEPT_NAMES.contains(deptName)) {
+                    query.setHasNoPermission(Boolean.TRUE);
+                }
+            } catch (Exception e) {
+                log.error("获取当前登录用户部门信息异常", e);
+                // 如果获取部门信息失败
+            }
+        }
         return baseMapper.getAssetMainInventoryPageList(new Page<>(query.getPageNum(), query.getPageSize()), query);
     }
 
@@ -524,10 +529,13 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void saveInventory(List<AssetInventoryTaskItemUpdateDTO> dtoList) {
+        Long userId = SecurityUtils.getUserId();
         Map<Integer, AssetInventoryTaskItemUpdateDTO> dtoMap = dtoList.stream()
                 .collect(Collectors.toMap(AssetInventoryTaskItemUpdateDTO::getAssetInventoryTaskItemId, dto -> dto));
         List<AssetInventoryTaskItem> assetInventoryTaskItems = assetInventoryTaskItemService.listByIds(dtoMap.keySet());
-
+        if (!Integer.valueOf(userId.intValue()).equals(assetInventoryTaskItems.get(0).getUserId())) {
+            throw new ServiceException("保存失败,只有指定人员可以操作");
+        }
         for (AssetInventoryTaskItem assetInventoryTaskItem : assetInventoryTaskItems) {
             AssetInventoryTaskItemUpdateDTO dto = dtoMap.get(assetInventoryTaskItem.getId());
             assetInventoryTaskItem.setResultStatus(dto.getResultStatus());
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 82ba9ee..654a416 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
@@ -3,7 +3,6 @@
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
-import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.entity.TDept;
 import com.ruoyi.common.exception.ServiceException;
@@ -11,16 +10,12 @@
 import com.ruoyi.system.model.OaApprovalFlowNode;
 import com.ruoyi.system.model.OaApprovalTodo;
 import com.ruoyi.system.query.ApprovalTodoListQuery;
-import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.OaApprovalTodoService;
 import com.ruoyi.system.service.TDeptService;
-import com.ruoyi.system.vo.ApprovalTodoVO;
-import com.ruoyi.system.vo.system.NotificationVO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.security.core.token.TokenService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -185,4 +180,9 @@
         //批量保存
         this.saveBatch(approvalTodoList);
     }
+
+    @Override
+    public void deleteByApplicationId(Integer id) {
+        lambdaUpdate().eq(OaApprovalTodo::getApplicationId, id).remove();
+    }
 }
diff --git a/ruoyi-system/src/main/resources/mapper/system/AssetInventoryTaskMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AssetInventoryTaskMapper.xml
index 0c7a40f..13f144e 100644
--- a/ruoyi-system/src/main/resources/mapper/system/AssetInventoryTaskMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/AssetInventoryTaskMapper.xml
@@ -153,6 +153,9 @@
             <if test="query.resultStatus != null">
                 AND aiti.result_status = #{query.reslutStatus}
             </if>
+            <if test="query.hasNoPermission or query.deptName == '资产管理部'">
+                AND aiti.user_id = #{query.userId}
+            </if>
         </where>
         ORDER BY
             am.asset_code
@@ -170,5 +173,31 @@
         WHERE
             inventory_task_id = #{taskId}
     </select>
+    <select id="getPageList" resultType="com.ruoyi.system.vo.asset.AssetInventoryTaskVO">
+        SELECT ait.id,
+               ait.user_id,
+               ait.dept_id,
+               ait.task_name,
+               ait.execute_date,
+               ait.status,
+               ait.remarks,
+               ait.create_time,
+               ait.create_by,
+               ait.update_time,
+               ait.update_by,
+               ait.disabled,
+               td.dept_name
+        FROM asset_inventory_task ait LEFT JOIN t_dept td ON ait.dept_id = td.id
+        <where>
+            ait.disabled = 0
+            <if test="query.taskName != null and query.taskName != ''">
+                AND ait.task_name LIKE CONCAT('%',#{query.taskName},'%')
+            </if>
+            <if test="query.deptId != null">
+                AND (td.id = #{query.deptId} OR FIND_IN_SET(#{query.deptId}, td.parent_id))
+            </if>
+        </where>
+        ORDER BY ait.create_time DESC
+    </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
index 31ea207..7d28d3d 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationAssetMapper.xml
@@ -62,19 +62,14 @@
     <select id="selectReturnByAssetIds" resultType="com.ruoyi.system.bo.OaApprovalApplicationAssetReturnBO">
         SELECT
         oaa.application_code,
-        CASE
-        WHEN oaa.approval_status = 0 THEN
-        1
-        WHEN oaa.approval_status = 1 THEN
-        2
-        END AS return_status,
+        oaa.approval_status AS return_status,
         oaaai.asset_main_id
         FROM
         oa_approval_application_asset_item oaaai
         LEFT JOIN oa_approval_application_asset oaaa ON oaaai.approval_application_id = oaaa.approval_application_id
         LEFT JOIN oa_approval_applications oaa ON oaaai.approval_application_id = oaa.id
         <where>
-            oaaa.type = 2 AND oaaa.borrow_application_id = #{applicationId} AND oaa.approval_status = 1
+            oaaa.type = 2 AND oaaa.borrow_application_id = #{applicationId} AND oaa.approval_status = 2
             <if test="assetMainIds != null and assetMainIds.size() > 0">
                 AND oaaai.asset_main_id IN
                 <foreach collection="assetMainIds" item="id" open="(" separator="," close=")">

--
Gitblit v1.7.1