From 622b30733e86feef57d8c0acfa5291970a6874a9 Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Thu, 4 Jun 2026 20:21:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(project):=20=E4=B8=AA=E4=BA=BA=E4=BA=8B?= =?UTF-8?q?=E9=A1=B9=E8=BD=AC=E9=A1=B9=E7=9B=AE=E4=BB=BB=E5=8A=A1=E5=90=8E?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E8=BF=9B=E5=BA=A6=E9=87=8D=E7=AE=97=E5=8F=8A?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E5=9F=9F=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 个人事项转为项目根任务后调用项目进度重算功能 - 为产品项目列表查询接口增加对象域鉴权注解 - 引入ProjectService依赖注入以支持进度重算调用 - 导入ProductObjectConstants常量用于对象域权限控制 --- .../project/service/personal/PersonalItemServiceImpl.java | 5 +++++ .../module/project/service/project/ProjectServiceImpl.java | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/personal/PersonalItemServiceImpl.java b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/personal/PersonalItemServiceImpl.java index 571f3ef..50081f0 100644 --- a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/personal/PersonalItemServiceImpl.java +++ b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/personal/PersonalItemServiceImpl.java @@ -30,6 +30,7 @@ import com.njcn.rdms.module.project.dal.mysql.status.ObjectStatusTransitionMappe import com.njcn.rdms.module.project.enums.ErrorCodeConstants; import com.njcn.rdms.module.project.framework.attachment.AttachmentFileIdResolver; import com.njcn.rdms.module.project.framework.attachment.AttachmentValidator; +import com.njcn.rdms.module.project.service.project.ProjectService; import com.njcn.rdms.module.project.service.status.StatusActionTextResolver; import com.njcn.rdms.module.system.api.user.AdminUserApi; import com.njcn.rdms.module.system.api.user.dto.AdminUserRespDTO; @@ -86,6 +87,8 @@ public class PersonalItemServiceImpl implements PersonalItemService { private AdminUserApi adminUserApi; @Resource private StatusActionTextResolver statusActionTextResolver; + @Resource + private ProjectService projectService; @Override @Transactional(rollbackFor = Exception.class) @@ -359,6 +362,8 @@ public class PersonalItemServiceImpl implements PersonalItemService { writeAuditLog(item, ObjectActivityConstants.PERSONAL_ITEM_ACTION_DELETE, item.getStatusCode(), null, null, "关联执行后转为项目任务"); } + // 个人事项转为项目根任务后,项目根任务均值已变,需下推一次项目进度重算(与任务侧增删改入口口径一致) + projectService.recalcProgress(projectId); } private ProjectTaskDO buildProjectTaskFromItem(PersonalItemDO item, Long projectId, Long executionId) { diff --git a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/ProjectServiceImpl.java b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/ProjectServiceImpl.java index b1a7e34..7662797 100644 --- a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/ProjectServiceImpl.java +++ b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/ProjectServiceImpl.java @@ -8,6 +8,7 @@ import com.njcn.rdms.framework.common.util.object.BeanUtils; import com.njcn.rdms.framework.security.core.util.SecurityFrameworkUtils; import com.njcn.rdms.module.project.constant.ObjectActivityConstants; import com.njcn.rdms.module.project.constant.ObjectRoleConstants; +import com.njcn.rdms.module.project.constant.ProductObjectConstants; import com.njcn.rdms.module.project.constant.ProjectObjectConstants; import com.njcn.rdms.module.project.controller.admin.project.vo.member.ProjectMemberSaveReqVO; import com.njcn.rdms.module.project.controller.admin.project.vo.project.ProjectContextNavRespVO; @@ -374,6 +375,9 @@ class ProjectServiceImpl implements ProjectService { } @Override + // 对象域鉴权:是该产品的显式成员即可拿"实现项目"派发下拉数据(memberOnly,不查权限码、不依赖 DB 权限配置) + @com.njcn.rdms.module.project.framework.security.annotation.CheckObjectPermission(objectType = ProductObjectConstants.OBJECT_TYPE, + objectId = "#productId", memberOnly = true) public List getProjectListByProductId(Long productId) { validateProductUsable(productId); return projectMapper.selectListByProductId(productId).stream()