From 796c79d58fa09afdfbcbf49755a068d835430456 Mon Sep 17 00:00:00 2001 From: dk <1260500659@qq.com> Date: Tue, 7 Jul 2026 16:48:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(notify=E3=80=81workReport=E3=80=81Project)?= =?UTF-8?q?:=20-=20=E7=A7=BB=E9=99=A4=E6=9C=88=E6=8A=A5=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E8=AF=B7=E6=B1=82VO=E4=B8=AD=E9=9D=A2=E8=B0=88=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=AD=97=E6=AE=B5=E7=9A=84=E9=9D=9E=E7=A9=BA=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=20-=20=E6=96=B0=E5=A2=9E=E7=AB=99=E5=86=85=E4=BF=A1?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E5=8F=82=E6=95=B0=E5=B8=B8=E9=87=8F=E7=B1=BB?= =?UTF-8?q?NotifyJumpConstants=20-=20=E5=9C=A8=E6=89=A7=E8=A1=8C=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=88=86=E9=85=8D=E9=80=9A=E7=9F=A5=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=B7=B3=E8=BD=AC=E7=B1=BB=E5=9E=8B=E5=92=8C=E9=A1=B9?= =?UTF-8?q?=E7=9B=AEID=E5=8F=82=E6=95=B0=20-=20=E5=9C=A8=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=80=9A=E7=9F=A5=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E7=B1=BB=E5=9E=8B=E5=92=8C=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?ID=E5=8F=82=E6=95=B0=20-=20=E5=9C=A8=E4=BB=BB=E5=8A=A1=E5=88=86?= =?UTF-8?q?=E9=85=8D=E9=80=9A=E7=9F=A5=E4=B8=AD=E6=B7=BB=E5=8A=A0=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E7=B1=BB=E5=9E=8B=E5=92=8C=E9=A1=B9=E7=9B=AEID?= =?UTF-8?q?=E5=8F=82=E6=95=B0=20-=20=E6=B7=BB=E5=8A=A0=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E6=8A=A5=E5=86=85=E5=AE=B9=E5=88=86=E9=9A=94=E7=AC=A6?= =?UTF-8?q?=E5=B8=B8=E9=87=8F=E7=94=A8=E4=BA=8E=E5=8C=BA=E5=88=86=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E6=97=A5=E6=9C=9F=E7=9A=84=E5=B7=A5=E4=BD=9C=E5=86=85?= =?UTF-8?q?=E5=AE=B9=20-=20=E4=BF=AE=E6=94=B9=E5=B7=A5=E4=BD=9C=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E6=8B=BC=E6=8E=A5=E6=96=B9=E5=BC=8F=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E5=88=86=E9=9A=94=E7=AC=A6=E6=9B=BF=E4=BB=A3?= =?UTF-8?q?=E5=88=86=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monthly/vo/MonthlyReportApproveReqVO.java | 1 - .../framework/notify/NotifyJumpConstants.java | 18 ++++++++++++++++++ .../service/project/ProjectServiceImpl.java | 3 +++ .../execution/ProjectExecutionServiceImpl.java | 3 +++ .../project/task/ProjectTaskServiceImpl.java | 3 +++ .../WorkReportDefaultDraftService.java | 5 +++-- .../project/ProjectServiceImplTest.java | 4 ++++ .../ProjectExecutionServiceImplTest.java | 4 ++++ .../task/ProjectTaskServiceImplTest.java | 4 ++++ 9 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/framework/notify/NotifyJumpConstants.java diff --git a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/controller/admin/workreport/monthly/vo/MonthlyReportApproveReqVO.java b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/controller/admin/workreport/monthly/vo/MonthlyReportApproveReqVO.java index eb2791d..14cb437 100644 --- a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/controller/admin/workreport/monthly/vo/MonthlyReportApproveReqVO.java +++ b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/controller/admin/workreport/monthly/vo/MonthlyReportApproveReqVO.java @@ -19,7 +19,6 @@ public class MonthlyReportApproveReqVO extends WorkReportStatusActionReqVO { @Schema(description = "面谈时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) - @NotNull private LocalDate meetingDate; @Schema(description = "优势描述") diff --git a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/framework/notify/NotifyJumpConstants.java b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/framework/notify/NotifyJumpConstants.java new file mode 100644 index 0000000..0da8201 --- /dev/null +++ b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/framework/notify/NotifyJumpConstants.java @@ -0,0 +1,18 @@ +package com.njcn.rdms.module.project.framework.notify; + +/** + * 站内信跳转参数常量。 + */ +public final class NotifyJumpConstants { + + private NotifyJumpConstants() { + } + + public static final String PARAM_JUMP_TYPE = "jumpType"; + public static final String PARAM_PROJECT_ID = "projectId"; + + public static final String JUMP_TYPE_PROJECT = "project"; + public static final String JUMP_TYPE_EXECUTION = "execution"; + public static final String JUMP_TYPE_TASK = "task"; + +} 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 be4402a..47715a4 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 @@ -49,6 +49,7 @@ import com.njcn.rdms.module.project.dal.mysql.status.ObjectStatusModelMapper; import com.njcn.rdms.module.project.dal.mysql.status.ObjectStatusTransitionMapper; import com.njcn.rdms.module.project.enums.ErrorCodeConstants; import com.njcn.rdms.module.project.enums.ProjectDictTypeConstants; +import com.njcn.rdms.module.project.framework.notify.NotifyJumpConstants; import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO; import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX; import com.njcn.rdms.module.project.service.datascope.ObjectDataScope; @@ -279,6 +280,8 @@ class ProjectServiceImpl implements ProjectService { Map params = new HashMap<>(); params.put("projectName", project.getProjectName()); params.put("roleName", r.roleName()); + params.put(NotifyJumpConstants.PARAM_JUMP_TYPE, NotifyJumpConstants.JUMP_TYPE_PROJECT); + params.put(NotifyJumpConstants.PARAM_PROJECT_ID, String.valueOf(project.getId())); applicationEventPublisher.publishEvent( com.njcn.rdms.module.project.framework.notify.NotifySendEvent.of( java.util.List.of(r.userId()), diff --git a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/execution/ProjectExecutionServiceImpl.java b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/execution/ProjectExecutionServiceImpl.java index a7fced6..326a6e2 100644 --- a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/execution/ProjectExecutionServiceImpl.java +++ b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/execution/ProjectExecutionServiceImpl.java @@ -43,6 +43,7 @@ import com.njcn.rdms.module.project.dal.mysql.status.ObjectStatusModelMapper; import com.njcn.rdms.module.project.dal.mysql.status.ObjectStatusTransitionMapper; import com.njcn.rdms.module.project.enums.ErrorCodeConstants; import com.njcn.rdms.module.project.enums.ProjectDictTypeConstants; +import com.njcn.rdms.module.project.framework.notify.NotifyJumpConstants; import com.njcn.rdms.module.project.framework.notify.NotifySendEvent; import com.njcn.rdms.module.project.framework.notify.NotifyTemplateCodeConstants; import com.njcn.rdms.module.project.util.DueRangeSupport; @@ -193,6 +194,8 @@ public class ProjectExecutionServiceImpl implements ProjectExecutionService { ProjectDO project = projectMapper.selectById(execution.getProjectId()); params.put("projectName", project == null ? "" : project.getProjectName()); params.put("executionName", execution.getExecutionName()); + params.put(NotifyJumpConstants.PARAM_JUMP_TYPE, NotifyJumpConstants.JUMP_TYPE_EXECUTION); + params.put(NotifyJumpConstants.PARAM_PROJECT_ID, String.valueOf(execution.getProjectId())); applicationEventPublisher.publishEvent(NotifySendEvent.of(recipients, NotifyTemplateCodeConstants.EXECUTION_ASSIGNED, params, NotifyMessageLevelConstants.NORMAL, SecurityFrameworkUtils.getLoginUserId())); diff --git a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/task/ProjectTaskServiceImpl.java b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/task/ProjectTaskServiceImpl.java index 451a565..dd8acb0 100644 --- a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/task/ProjectTaskServiceImpl.java +++ b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/project/task/ProjectTaskServiceImpl.java @@ -41,6 +41,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.framework.notify.NotifyJumpConstants; import com.njcn.rdms.module.project.framework.notify.NotifySendEvent; import com.njcn.rdms.module.project.framework.notify.NotifyTemplateCodeConstants; import com.njcn.rdms.module.project.framework.security.annotation.CheckObjectPermission; @@ -207,6 +208,8 @@ public class ProjectTaskServiceImpl implements ProjectTaskService { ProjectDO project = projectMapper.selectById(projectId); params.put("projectName", project == null ? "" : project.getProjectName()); params.put("taskName", task.getTaskTitle()); + params.put(NotifyJumpConstants.PARAM_JUMP_TYPE, NotifyJumpConstants.JUMP_TYPE_TASK); + params.put(NotifyJumpConstants.PARAM_PROJECT_ID, String.valueOf(projectId)); applicationEventPublisher.publishEvent(NotifySendEvent.of(recipients, NotifyTemplateCodeConstants.TASK_ASSIGNED, params, NotifyMessageLevelConstants.NORMAL, SecurityFrameworkUtils.getLoginUserId())); diff --git a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/workreport/defaultdraft/WorkReportDefaultDraftService.java b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/workreport/defaultdraft/WorkReportDefaultDraftService.java index 3bab8ba..e16253a 100644 --- a/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/workreport/defaultdraft/WorkReportDefaultDraftService.java +++ b/rdms-project/rdms-project-boot/src/main/java/com/njcn/rdms/module/project/service/workreport/defaultdraft/WorkReportDefaultDraftService.java @@ -67,6 +67,7 @@ import static com.njcn.rdms.framework.common.exception.util.ServiceExceptionUtil public class WorkReportDefaultDraftService { private static final String WORK_ITEM_MY_ITEMS = "我的事项"; + private static final String WORKLOG_DAY_SEPARATOR = "[[WR_DAY_SPLIT]]"; @Resource private ObjectStatusModelMapper objectStatusModelMapper; @@ -759,7 +760,7 @@ public class WorkReportDefaultDraftService { builder.append(lineTitle); appendBracket(builder, priority, latestProgressRate, totalWorkHours); if (!workContents.isEmpty()) { - builder.append(":").append(String.join(";", workContents)); + builder.append(":").append(String.join(WORKLOG_DAY_SEPARATOR, workContents)); } return builder.toString(); } @@ -860,7 +861,7 @@ public class WorkReportDefaultDraftService { builder.append("(").append(String.join(" / ", parts)).append(")"); } if (weeklyMode && worklogAggregate.hasWorkContent()) { - builder.append(":").append(String.join(";", worklogAggregate.workContents())); + builder.append(":").append(String.join(WORKLOG_DAY_SEPARATOR, worklogAggregate.workContents())); } return builder.toString(); } diff --git a/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/ProjectServiceImplTest.java b/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/ProjectServiceImplTest.java index c89252d..09c032a 100644 --- a/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/ProjectServiceImplTest.java +++ b/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/ProjectServiceImplTest.java @@ -811,6 +811,10 @@ class ProjectServiceImplTest extends BaseMockitoUnitTest { com.njcn.rdms.module.project.framework.notify.NotifySendEvent first = captor.getAllValues().get(0); assertEquals("project_created", first.getTemplateCode()); assertEquals(9L, first.getOperatorUserId()); + assertEquals(com.njcn.rdms.module.project.framework.notify.NotifyJumpConstants.JUMP_TYPE_PROJECT, + first.getParams().get(com.njcn.rdms.module.project.framework.notify.NotifyJumpConstants.PARAM_JUMP_TYPE)); + assertEquals("10", + first.getParams().get(com.njcn.rdms.module.project.framework.notify.NotifyJumpConstants.PARAM_PROJECT_ID)); assertEquals("项目经理", first.getParams().get("roleName")); assertEquals("灿能项目", first.getParams().get("projectName")); assertTrue(first.getUserIds().contains(5L)); diff --git a/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/execution/ProjectExecutionServiceImplTest.java b/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/execution/ProjectExecutionServiceImplTest.java index 0d8d77f..c1a7b5f 100644 --- a/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/execution/ProjectExecutionServiceImplTest.java +++ b/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/execution/ProjectExecutionServiceImplTest.java @@ -33,6 +33,7 @@ import com.njcn.rdms.module.project.dal.mysql.status.ObjectStatusModelMapper; import com.njcn.rdms.module.project.dal.mysql.status.ObjectStatusTransitionMapper; import com.njcn.rdms.module.project.enums.ErrorCodeConstants; import com.njcn.rdms.module.project.enums.ProjectDictTypeConstants; +import com.njcn.rdms.module.project.framework.notify.NotifyJumpConstants; import com.njcn.rdms.module.project.framework.notify.NotifySendEvent; import com.njcn.rdms.module.project.service.project.ProjectRequirementService; import com.njcn.rdms.module.system.api.dict.DictDataApi; @@ -919,6 +920,9 @@ class ProjectExecutionServiceImplTest extends BaseMockitoUnitTest { assertEquals("execution_assigned", ev.getTemplateCode()); assertEquals(7L, ev.getOperatorUserId()); assertTrue(ev.getUserIds().containsAll(List.of(5L, 6L))); + assertEquals(NotifyJumpConstants.JUMP_TYPE_EXECUTION, + ev.getParams().get(NotifyJumpConstants.PARAM_JUMP_TYPE)); + assertEquals("10", ev.getParams().get(NotifyJumpConstants.PARAM_PROJECT_ID)); assertEquals("灿能项目", ev.getParams().get("projectName")); assertEquals("一阶段", ev.getParams().get("executionName")); } diff --git a/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/task/ProjectTaskServiceImplTest.java b/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/task/ProjectTaskServiceImplTest.java index 4fe1d28..272d032 100644 --- a/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/task/ProjectTaskServiceImplTest.java +++ b/rdms-project/rdms-project-boot/src/test/java/com/njcn/rdms/module/project/service/project/task/ProjectTaskServiceImplTest.java @@ -7,6 +7,7 @@ import com.njcn.rdms.module.project.dal.dataobject.project.task.ProjectTaskDO; import com.njcn.rdms.module.project.dal.dataobject.project.task.TaskAssigneeDO; import com.njcn.rdms.module.project.dal.mysql.project.ProjectMapper; import com.njcn.rdms.module.project.dal.mysql.project.task.TaskAssigneeMapper; +import com.njcn.rdms.module.project.framework.notify.NotifyJumpConstants; import com.njcn.rdms.module.project.framework.notify.NotifySendEvent; import com.njcn.rdms.module.project.framework.notify.NotifyTemplateCodeConstants; import org.junit.jupiter.api.Test; @@ -63,6 +64,9 @@ class ProjectTaskServiceImplTest extends BaseMockitoUnitTest { ArgumentCaptor captor = ArgumentCaptor.forClass(NotifySendEvent.class); verify(applicationEventPublisher).publishEvent(captor.capture()); NotifySendEvent event = captor.getValue(); + assertEquals(NotifyJumpConstants.JUMP_TYPE_TASK, + event.getParams().get(NotifyJumpConstants.PARAM_JUMP_TYPE)); + assertEquals("50", event.getParams().get(NotifyJumpConstants.PARAM_PROJECT_ID)); assertEquals(NotifyTemplateCodeConstants.TASK_ASSIGNED, event.getTemplateCode()); assertTrue(event.getUserIds().contains(1L)); // 负责人 assertTrue(event.getUserIds().contains(2L)); // 协办人