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